我希望在一个由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 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
将相应像素值设置为零的图像不符合预期。
这里发生了什么?
答案 0 :(得分:4)
您似乎已将x
和y
与行和列混淆。
img_black(x(i), y(i),:)
应该是
img_black(y(i), x(i),:);
这是因为img_black
的第一个维度是行(y),第二个维度是列(x)。
生成的图像看起来像是这样,因为你的线路走错了(有时)超出原始图像的边界,但MATLAB很乐意扩展你的图像(用零)并设置你要求的值,因此所有右侧的黑色像素。
注意:这种在行,列和x,y之间来回切换在MATLAB的内置函数中很常见,您应该始终注意输出的内容。一个类示例是
meshgrid
vsndgrid
输出。