【发布时间】:2016-03-03 13:53:53
【问题描述】:
我使用霍夫变换来检测图像中的直线。 houghlines 函数返回可以绘制的线端点。但是我希望通过在像素宽度为 2 的图像上创建一条黑线来从图像中删除检测到的线。
这是一个示例输出。我想将所有绿色像素设置为零。我已经尝试使用这个Bresenham 代码来获取线的两个端点之间的所有点并将它们设置为零。然而结果并不如预期。
【问题讨论】:
标签: image matlab image-processing line
我使用霍夫变换来检测图像中的直线。 houghlines 函数返回可以绘制的线端点。但是我希望通过在像素宽度为 2 的图像上创建一条黑线来从图像中删除检测到的线。
这是一个示例输出。我想将所有绿色像素设置为零。我已经尝试使用这个Bresenham 代码来获取线的两个端点之间的所有点并将它们设置为零。然而结果并不如预期。
【问题讨论】:
标签: image matlab image-processing line
有不同的可能方法来做到这一点。一个非常简单的方法是使用im2bw 来设置一个阈值。
I = imread('fH7ha.jpg');
figure;
subplot 121; imshow(I); title('before')
I = rgb2gray(I);
I = im2bw(I, 0.9);
subplot 122; imshow(I); title('after')
但这有点不准确,因为线条的某些部分在您的图像之外,然后您可以隔离绿色区域并使用imdilate 扩大它:
I = imread('fH7ha.jpg');
figure;
subplot 131; imshow(I); title('before')
green_pixels = I(:,:,2)-I(:,:,1)-I(:,:,3);
green_pixels = im2bw(green_pixels, 0.1);
se = strel('disk', 2);
green_pixels = imdilate(green_pixels, se);
subplot 132; imshow(green_pixels); title('green pixels')
I = rgb2gray(I);
I(green_pixels) = 0;
subplot 133; imshow(I); title('after')
【讨论】:
lines = houghlines(...); xy = [lines(1).point1; lines(1).point2];? o_0