在MATLAB中更改一行上的像素值

时间:2016-03-06 02:47:12

标签: 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 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

尽管下图中绘制的点与预期的一致

将相应像素值设置为零的图像不符合预期。

enter image description here

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

您似乎已将xy与行和列混淆。

img_black(x(i), y(i),:)

应该是

img_black(y(i), x(i),:);

这是因为img_black的第一个维度是行(y),第二个维度是列(x)。

生成的图像看起来像是这样,因为你的线路走错了(有时)超出原始图像的边界,但MATLAB很乐意扩展你的图像(用零)并设置你要求的值,因此所有右侧的黑色像素。

  

注意:这种在行,列和x,y之间来回切换在MATLAB的内置函数中很常见,您应该始终注意输出的内容。一个类示例是meshgrid vs ndgrid输出。