двоичная маска для координат с использованием MATLAB - PullRequest
0 голосов
/ 25 апреля 2020

Мне нужно создать бинарную маску. У меня есть некоторые координаты, и я делаю эти координаты и внутри этой области равными 1, а фон равен нулю.

Вот что я сделал, но проблема в том, что ROI находится не в правильном положении и находится в правом нижнем углу изображения. Я ценю, если кто-то может указать мне правильное направление.

function [X,Y, BW] = Create_mask(X,Y,im)


X = round(X);
Y = round(Y);

X ( X < 1 ) = 1;
Y ( Y < 1 ) = 1;


BW = im > 255;
for p = 1:length(X)

    BW(Y(p),X(p)) = 1;
end


for n = 0:(1/round(sqrt((X(end)-X(1))^2 + (Y(end)-Y(1))^2 ))):1

    xn = round(X(1) +(X(end) - X(1))*n);
    yn = round(Y(1) +(Y(end) - Y(1))*n);
    BW(yn,xn) = 1;

end


se = strel('disk',10);
BW = imclose(BW,se);
BW = imdilate(BW,se);
BW = imfill(BW,'holes');
im( im < 255 ) = 0;
im = imclose(im,se);
BW = BW * 255;
BW = im2uint8(BW);
% BW = imresize(BW, [256 256],'nearest');
figure;
imshow(BW);

% close all;

end

Вот вывод функции:

enter image description here

I ожидал быть похожим на это изображение. Это не точное решение, но оно показывает мои ожидания.

enter image description here

Координаты X и Y прикреплены здесь , первый столбец X и второй Y.

1 Ответ

0 голосов
/ 26 апреля 2020

Вы можете сделать это, вызвав функцию inpolygon, попробуйте

function mask=createmask(x,y, cmin, cmax, dx)
if(nargin<3)
    cmin=min([x(:) y(:)]);
end
if(nargin<4)
    cmax=max([x(:) y(:)]);
end
if(nargin<5)
    dx=(cmax-cmin)/100;
end
if(length(dx)==1)
    dx=[dx dx];
end
[xi,yi]=meshgrid(cmin(1):dx(1):cmax(1),cmin(2):dx(2):cmax(2));
mask=reshape(inpolygon(xi(:),yi(:),x(:),y(:)), size(xi));

, чтобы проверить

xv = [0 3 3 0 0 NaN 1 1 2 2 1];
yv = [0 0 3 3 0 NaN 1 2 2 1 1];
mask=createmask(xv,yv, [-1 -1], [4 4]);
imagesc(mask)
...