【问题标题】:How to find timber in a truck using MATLAB?如何使用 MATLAB 在卡车中查找木材?
【发布时间】:2015-06-26 08:46:39
【问题描述】:

我的问题是使用拖车背面的图像自动查找和计算卡车中的木材。我试图使用 MATLAB Image Toolbox 解决这个问题。所以,这是我的代码。

function [ centers, rads, metrics ] = TimberFind( img )
    minrad = 20;
    maxrad = 110;
    Hsens = .93;
    CannySens = .20;

    img_gray = rgb2gray(img);
    PSF = fspecial('gaussian', 5, 0.5);
    img_gray = imfilter(img_gray, PSF, 'symmetric', 'conv');
    img_gray = imadjust(img_gray);
    PSF=fspecial('gaussian', 10, 1);
    Blurred = imfilter(img_gray, PSF, 'symmetric', 'conv');
    cont = imsubtract(img_gray, Blurred);
    preprocessed = imadd(img_gray, 3*cont);    

    bin = edge(preprocessed, 'canny', CannySens);

    [cen, r, m] = imfindcircles(bin, [minrad maxrad],'Sensitivity', Hsens);  
end

但是结果不是很好。您可以看到the full data 设置或以下示例:

所以,如果我让 Canny 和 imfindcircles 算法足够灵敏以检测所有木材,就会发现一些多余的结果。我有一个想法来解决这个问题,从大图像中剪下每一块木材,然后构造一些获得的小图片的全局标准,并在上面尝试一些机器学习算法。但我认为这种方式相当困难,所以也许有人可以提出其他建议?在使用 Canny 运算符之前,也许有更好的方法来对图像进行预处理?如果你知道如何让它变得更好,请告诉我。谢谢!

【问题讨论】:

  • 你可以发布原始图像,没有红色圆圈吗?
  • 好的,我把它们放到云端了。
  • 如果您看到错误检测,其中一些很容易使用后处理删除。例如,错误检测的外观与您发现的其他圈子不同。
  • 是的,我确实做到了。我还尝试使用亮度和纹理参数删除错误结果,但图片不同(白天/夜晚,夏季/冬季),因此我无法通过使用某些阈值删除错误检测来正确解决问题。我想到了机器学习。

标签: matlab image-processing machine-learning


【解决方案1】:

实际上并不需要对您的图像进行预处理,在使用imfindcircles 之前,灰度、高斯滤波和 Cany 边缘检测实际上都没有用处。

您的代码的简化版本在此图像上给出了非常不错的结果:

代码:

minrad = 20;
maxrad = 110;
Hsens = .93;

[cen, r] = imfindcircles(img, [minrad maxrad],'Sensitivity', Hsens);

结果:

有趣的是,结果比原始代码的效果要好得多。越简单越好!

【讨论】:

  • 使用你的方式会导致我的图像效果不佳。但是我在使用边缘检测时确实犯了一个错误,因为 imfindcircles 是自己做的。所以,我修复了它,结果变得更好,但还不够好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2013-12-27
  • 2017-10-09
  • 1970-01-01
相关资源
最近更新 更多