我的问题是使用拖车后部的图像自动查找和计数货车上的木材。我正在尝试使用MATLAB图像工具箱解决此问题。所以,这是我的代码。
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
但结果并不是很好。您可以查看完整数据集或以下示例:
如果我让Canny和imfindcircles算法足够敏感以便检测到所有木材,那么会有一些多余的结果。我有一个想法,通过从大图像中切出每个木材,然后构建一些获得小图片的全局标准,并尝试在其上使用一些机器学习算法来解决此问题。但我认为这种方法可能比较困难,也许有人能提供其他建议?也许在使用Canny算子之前有更好的图像预处理方式?如果您有任何更好的想法,请告诉我。谢谢!