Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Image 在MATLAB中更改直线上的像素值_Image_Matlab_Image Processing_Line_Hough Transform - Fatal编程技术网

Image 在MATLAB中更改直线上的像素值

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

我希望将其端点由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
尽管下图中绘制的点与预期一致

相应像素值设置为零的图像与预期不符


这里发生了什么?

看起来您将
x
y
与行和列混淆了

img_black(x(i), y(i),:)
应该是

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

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

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


非常感谢。我猜我被搞糊涂了,因为情节的论点顺序是相反的。我认为,随着情节(x(i),y(i))的运作,img(x(i),y(i))也应该如此。@HARJATINSINGH-Yup!这正是我要说的。这是一个常见的混淆点。希望这对你有用。