但是,我尝试了几种方法,但是它们找到了图像中的所有边缘瓶子,有什么方法可以检测到仅倾斜的瓶子,或者我如何更改方法?
f15 = imread('bottle_crate_15.png');
BW_15 = imbinarize(f15);
%Canny:
BW_canny = edge(BW_15, 'Canny');
imshow(BW_canny);
%bwboundaries
[B,L,N,A] = bwboundaries(BW_15, 'noholes');
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end
%dilate:
im = mean(f15,4);
im = (im-min(im(:))) / (max(im(:))-min(im(:)));
bin = im2bw(im);
SE = strel('disk',1);
bin = ~imerode(~bin,SE);
bin = ~imerode(~bin,SE);
bin =~imdilate(~bin,SE);
bin =~imdilate(~bin,SE);
imshow(bin);
ps:原始图片:
如果已经足够,一种方法可能是对是否有未正确放置的瓶子进行分类:
1。)检测饮料箱中的网格结构(粗线)。然后,您应该能够将图像分割成应该放置瓶子的区域。
2。)对于每个放置区域,您都可以对它是否包含一个瓶子,是否为空或看起来有所不同进行分类。有几种方法可以解决此问题。如果需要显示饮料箱的多个图像,则可以训练分类器(使用SVM或CNN)。如果您没有足够的训练图像,则仍然可以使用低级图像处理技术对区域进行分类(例如,使用圆形检测来检测包含瓶子的放置区域)。
一种检测错误放置瓶子的方法:
应用对象检测器(例如https://www.mathworks.com/help/deeplearning/ug/object-detection-using-yolo-v2.html?s_tid=blogs_rc_6)来定位所有瓶子。忽略正确放置在放置区域内的检测结果(例如使用粗线)。其余的检测结果显示了错误放置的瓶子。
此外,您可以通过收集并注释相应的图像(https://de.mathworks.com/help/vision/ref/trainrcnnobjectdetector.html)直接训练对象检测器以检测错放的瓶子。