matlab - 如何使用 MATLAB 在卡车中查找木材?

标签 matlab image-processing machine-learning

我的问题是使用拖车背面的图像自动查找和计算卡车中的木材。我正在尝试使用 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设置或以下示例: first input image first output image

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

最佳答案

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

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

enter image description here

代码:

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

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

结果:

enter image description here

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

关于matlab - 如何使用 MATLAB 在卡车中查找木材?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29734116/

相关文章:

python-3.x - 使用之前训练好的模型在catboost中进行进一步预测

machine-learning - 为什么预训练的 ResNet18 比训练的验证精度更高?

MATLAB 查找函数并将其应用于重复索引的值

matlab - 在 MATLAB 中获取矩阵列最大值的索引

JavaCL - 管理非常大的图像处理

python - 是否可以使用 PIL 减少图像的深度?

algorithm - 在matlab中数值求解二重积分

matlab - 裁剪图像后如何消除边缘边界附近的错误?

python-3.x - 从图像中自动检测语言以提取 OCR 字符

matlab - 机器学习 (MATLAB) - 神经网络在检查点中保存为 'struct' 而不是 'network'