Моя проблема заключается в том, чтобы найти и считать древесину в грузовике автоматически, используя изображение с задней стороны прицепа. Я пытаюсь решить эту проблему с помощью 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
Но результат не очень хорош. Вы можете увидеть полный набор данных или следующий пример:
Итак, если я сделаю Canny и imfindcircles алгоритмы достаточно чувствительными, чтобы обнаружить всю древесину, есть некоторые избыточные найденные потери. У меня есть идея решить эту проблему, вырезая каждую древесину из большого изображения, затем создавая некоторые глобальные критерии получения небольших изображений и пробую на нем алгоритм машинного обучения. Но я думаю, что этот путь довольно сложный, может быть, кто-нибудь может предложить что-нибудь еще? Может быть, есть лучший способ сделать предварительную обработку изображения перед использованием оператора Canny? Если у вас есть идея, как сделать это лучше, скажите мне. Спасибо!