【问题标题】:Line removal from an image从图像中去除线条
【发布时间】:2016-03-03 13:53:53
【问题描述】:

我使用霍夫变换来检测图像中的直线。 houghlines 函数返回可以绘制的线端点。但是我希望通过在像素宽度为 2 的图像上创建一条黑线来从图像中删除检测到的线。

这是霍夫线在图像上的示例图。

这是一个示例输出。我想将所有绿色像素设置为零。我已经尝试使用这个Bresenham 代码来获取线的两个端点之间的所有点并将它们设置为零。然而结果并不如预期。

【问题讨论】:

    标签: image matlab image-processing line


    【解决方案1】:

    有不同的可能方法来做到这一点。一个非常简单的方法是使用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
    • 是的。这就是我所拥有的
    • @harjatin,那你在追求什么。我不确定是否会关注
    • 我有线路端点。我可以绘制它(例如这里的绿线)。我只是想找到一种方法来删除(设置值 = 0)落在那条线上的像素(绿色的那个)。我尝试使用 bresenham 获取线上的所有点,然后将它们删除。但是,这并不会删除绿线覆盖的所有像素。
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 2015-12-22
    • 2018-04-02
    • 2020-03-12
    • 1970-01-01
    • 2015-01-08
    • 2018-11-13
    • 2018-07-13
    相关资源
    最近更新 更多