Если вы уверены, что хотите использовать imfreehand для рисования ROI, используйте следующий код.
I = imread('pout.tif');
imshow(I)
% Draw the ROI and double click when finished
h = imfreehand();
position = wait(h);
map = createMask(h);
% set image points within the ROI to NaN
I(map) = nan;
imshow(I)
Если вы хотите более обобщенный метод, я предлагаю вам попробовать приведенный ниже код. Он вычисляет, какие точки изображения находятся в пределах многоугольника, определенного x и y. Если вам интересно, вы можете прочитать об используемых уравнениях, следуя этой ссылке .
I = imread('eight.tif');
% Get subscripts
[py, px] = meshgrid(1:size(I,1), 1:size(I,2));
% Coordinates defining the region
x = [222 272 300 270 221 194];
y = [21 21 75 121 121 75];
% Display the region
figure
imagesc(I)
hold on
fill(x,y,'r')
hold off
% Close the loop of the polygon
x = [x,x(1)];
y = [y,y(1)];
n = numel(x);
k = zeros([size(px),n-1]);
% See link for explanation
for i=1:n-1
k(:,:,i) = (px - x(i))*(y(i+1) - y(i)) - (py - y(i))*(x(i+1) - x(i));
end
map = all(k > 0,3) | all(k < 0,3);
% Set image points within the ROI to NaN
I(map') = nan;
% Display the final result
figure
imagesc(I)