Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab-创建线掩码_Matlab_Image Processing - Fatal编程技术网

Matlab-创建线掩码

Matlab-创建线掩码,matlab,image-processing,Matlab,Image Processing,我有一个mxn大小的面具 我想给这个遮罩添加一条线,这样通过它的所有点都将设置为true 该线由两点定义:(x1,y1)、(x2,y2) 实现这一结果的最佳方式是什么 请注意,我只有图像处理工具箱 可能输入和所需输出的示例: %generates a mask m = 152; n=131; mask = false(m,n); %example for possible input points y1 = 68; x1 = 69; y2 = 28; x2 = 75; % code for

我有一个mxn大小的面具

我想给这个遮罩添加一条线,这样通过它的所有点都将设置为true

该线由两点定义:(x1,y1)、(x2,y2)

实现这一结果的最佳方式是什么

请注意,我只有图像处理工具箱

可能输入和所需输出的示例:

%generates a mask
m = 152; n=131; 
mask = false(m,n);
%example for possible input points
y1 = 68; x1 = 69;
y2 = 28; x2 = 75;

% code for adding the line into the mask%

imshow(mask);
预期结果:


谢谢

我们首先可以通过计算点之间的距离(以像素为单位)来确定两点之间有多少像素。然后,我们可以使用
linspace
在指定此点数的两个端点之间创建点的线性间距。然后我们可以对结果进行四舍五入以获得像素坐标

然后我们可以使用
sub2ind
将掩码中的这些值设置为
1

% Distance (in pixels) between the two endpoints
nPoints = ceil(sqrt((x2 - x1).^2 + (y2 - y1).^2)) + 1;

% Determine x and y locations along the line
xvalues = round(linspace(x1, x2, nPoints));
yvalues = round(linspace(y1, y2, nPoints));

% Replace the relevant values within the mask
mask(sub2ind(size(mask), yvalues, xvalues)) = 1;

它是直线还是线段?@Suever-两者之间有什么区别?在一种情况下,你只想要两点之间的东西,而在另一种情况下,你想要穿过这两点的无限直线上的任何东西。@Suever,我明白了。我需要一个线段在我的情况下(只有像素之间的点)。我加了一个例子。谢谢您的评论。我认为您的示例坐标与示例图像不太匹配。它在您的图像中看起来像
x1-x2==1