Image 在MATLAB中更改直线上的像素值
我希望将其端点由hough变换返回的直线上的值设置为零。我已经编写了以下代码片段Image 在MATLAB中更改直线上的像素值,image,matlab,image-processing,line,hough-transform,Image,Matlab,Image Processing,Line,Hough Transform,我希望将其端点由hough变换返回的直线上的值设置为零。我已经编写了以下代码片段 imshow(img); hold on img_black = img; for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; %line end points [x, y] = bresenham(xy(1,1),xy(1,2),xy(2,1),xy(2,2)); %returns all points on
imshow(img);
hold on
img_black = img;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2]; %line end points
[x, y] = bresenham(xy(1,1),xy(1,2),xy(2,1),xy(2,2)); %returns all points on the line
for i = 1:length(x)
plot(x(i),y(i),'*'); %to plot individual pixels on line itself
img_black(x(i),y(i),:) = [0,0,0]; %set rgb values to zero
end
end
尽管下图中绘制的点与预期一致
相应像素值设置为零的图像与预期不符
这里发生了什么?看起来您将
x
和y
与行和列混淆了
img_black(x(i), y(i),:)
应该是
img_black(y(i), x(i),:);
这是因为img_black
的第一个维度是行(y),第二个维度是列(x)
生成的图像看起来是这样的,因为您的线条走错了方向,并且(有时)超出了原始图像的边界,但是MATLAB很乐意扩展您的图像(使用零)并设置您请求的值,因此右侧的所有黑色像素
注意:行、列和x、y之间的这种来回切换在MATLAB的内置函数中很常见,您应该始终注意输出是什么。一个类示例是meshgrid
vsndgrid
outputs
非常感谢。我猜我被搞糊涂了,因为情节的论点顺序是相反的。我认为,随着情节(x(i),y(i))的运作,img(x(i),y(i))也应该如此。@HARJATINSINGH-Yup!这正是我要说的。这是一个常见的混淆点。希望这对你有用。