【问题标题】:binary mask for the coordinates using MATLAB使用 MATLAB 的坐标的二进制掩码
【发布时间】:2020-04-27 00:55:18
【问题描述】:

我需要创建一个二进制掩码。我有一些坐标,我使这些坐标在那个区域内等于 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

这是函数的输出:

我期待与这张图片相似。这不是确切的解决方案,但它显示了我的期望。

X and Y coordinates are attached here,第一个列是 X,第二个是 Y。

【问题讨论】:

  • p 上的循环是正确的。我不知道第二个循环应该做什么。如果您的结果与您的期望不符,也许您的期望是错误的?你用来生成你展示的图形的输入是什么?你期望什么输出?所有这些都将有助于回答您的问题。
  • @CrisLuengo 我编辑了问题以添加更多信息。
  • 再一次,第一个循环是正确的,它设置了 X 和 Y 给定的像素。X 和 Y 是否包含正确的数据是完全不同的。第二个循环还需要解释,我不明白它应该做什么。你试过把它排除在外吗?
  • 你的坐标系和图像是什么关系?例如你的[X(1) Y(1)][671.25 622.25]。是指像素数[671 622]吗?
  • 抱歉没有尽快回复。是的,它指的是像素数[671 622]。

标签: matlab matlab-figure mask


【解决方案1】:

你可以通过调用函数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)

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2020-03-12
    • 2020-04-13
    • 2017-03-19
    • 1970-01-01
    • 2019-02-13
    • 2020-09-28
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多