在 MATLAB 中更改一行上的像素值
Change pixel values on a line in MATLAB
我希望在其端点由霍夫变换返回为零的直线上设置值。我写了下面的代码片段
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 很乐意扩展您的图像(使用零)并设置您请求的值,因此右边的所有黑色像素。
NOTE: This switching back and forth between row, column and x,y is common throughout MATLAB's built-in functions and you should always be careful to note what the output is. A class example is meshgrid
vs ndgrid
outputs.
我希望在其端点由霍夫变换返回为零的直线上设置值。我写了下面的代码片段
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 很乐意扩展您的图像(使用零)并设置您请求的值,因此右边的所有黑色像素。
NOTE: This switching back and forth between row, column and x,y is common throughout MATLAB's built-in functions and you should always be careful to note what the output is. A class example is
meshgrid
vsndgrid
outputs.