В то время как это верно, что использование ошибок является более дорогим, большинство людей полагает, что большинство их GUID будет компьютером, сгенерированным, таким образом, TRY-CATCH
не является слишком дорогим, так как это только генерирует стоимость на CATCH
. Можно доказать это себе с простым тестом два (пользовательская общественность, никакой пароль).
Здесь Вы идете:
using System.Text.RegularExpressions;
///
/// Validate that a string is a valid GUID
///
///
///
private bool IsValidGUID(string GUIDCheck)
{
if (!string.IsNullOrEmpty(GUIDCheck))
{
return new Regex(@"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$").IsMatch(GUIDCheck);
}
return false;
}
Вы можете использовать обычную команду PLOT с круговой точкой маркера :
[x_p,y_p] = find(points);
imshow(im); %# Display your image
hold on; %# Add subsequent plots to the image
plot(y_p,x_p,'o'); %# NOTE: x_p and y_p are switched (see note below)!
hold off; %# Any subsequent plotting will overwrite the image!
Вы также можете настроить эти другие свойства маркера участка: MarkerEdgeColor
, MarkerFaceColor
, MarkerSize
.
Если вы затем хотите сохранить новое изображение с нанесенными на него маркерами, вы можете посмотреть этот ответ я дал на вопрос о сохранении размеров изображения при сохранении изображений из фигур.
ПРИМЕЧАНИЕ: При построении данных изображения с помощью IMSHOW (или IMAGE , и т. д.), обычная интерпретация строк и столбцов по существу меняется. Обычно первое измерение данных (то есть строки) считается данными, которые лежат на оси x, и, вероятно, поэтому вы используете x_p
в качестве первого набора значений, возвращаемых функцией FIND . Однако IMSHOW отображает первое измерение данных изображения по оси y , поэтому первое значение, возвращаемое функцией FIND, в этом случае оказывается значением координаты y .
Хм, мне пришлось повторно переключить их в этом вызове:
k = convhull(x,y);
figure;
imshow(image); %# Display your image
hold on; %# Add subsequent plots to the image
plot(x,y,'o'); %# NOTE: x_p and y_p are switched (see note below)!
hold off; %# Any subsequent plotting will overwrite the image!
x и y создаются с использованием следующего кода:
temp_hull = stats_single_object(k).ConvexHull; for k2 = 1:length(temp_hull) i = i+1; [x(i,1)] = temp_hull(k2,1); [y(i,1)] = temp_hull(k2,2); end;
это может быть что ConvexHull - это наоборот, и поэтому сюжет другой. Или что я сделал ошибку, и это должно быть
[x(i,1)] = temp_hull(k2,2); [y(i,1)] = temp_hull(k2,1);
Однако в документации неясно, какой столбец = x OR y: Цитата: «Каждая строка матрицы содержит координаты x и y одной вершины многоугольника»
Я читал это, поскольку x - это первый столбец, а y - второй столбец.
Вот метод, который, как мне кажется, вам нужен:
[x_p, y_p] = find (points);
% convert the subscripts to indicies, but transposed into a row vector
a = sub2ind(size(im), x_p, y_p)';
% assign all the values in the image that correspond to the points to a value of zero
im([a]) = 0;
% show the new image
imshow(im)
Этот файл от Zhenhai Wang из файлового обмена Matlab Central делает свое дело.
%----------------------------------------------------------------
% H=CIRCLE(CENTER,RADIUS,NOP,STYLE)
% This routine draws a circle with center defined as
% a vector CENTER, radius as a scaler RADIS. NOP is
% the number of points on the circle. As to STYLE,
% use it the same way as you use the rountine PLOT.
% Since the handle of the object is returned, you
% use routine SET to get the best result.
%
% Usage Examples,
%
% circle([1,3],3,1000,':');
% circle([2,4],2,1000,'--');
%
% Zhenhai Wang <zhenhai@ieee.org>
% Version 1.00
% December, 2002
%----------------------------------------------------------------