我的问题是使用拖车后部的图像自动查找和计算卡车中的木材.我试图使用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
Run Code Online (Sandbox Code Playgroud)
但结果并不是很好.您可以看到完整的数据集或以下示例:

因此,如果我使Canny和imfindcircles算法足够灵敏地检测所有木材,那么会发现一些过量的反应.我有一个想法,就是从大图像中删除每个木材,然后构建一些获得小图片的全局标准,并尝试一些机器学习算法来解决这个问题.但我认为这种方式相当困难,所以也许有人可以提出其他建议吗?也许有更好的方法在使用Canny运算符之前对图像进行预处理?如果你有任何想法如何做到更好,请告诉我.谢谢!