Matlab如何检测红圈内不规则放置的瓶子,同时排除那些规则的圆瓶?

How to detect irregular placed bottles in the red circle while exclude those regular circle bottle by Matlab?

我只想检测那些不规则的瓶子,比如红圈:

然而,我已经尝试了几种方法,但是他们在图像中找到了所有边缘的瓶子,有没有什么方法可以只检测倾斜的瓶子或者我如何改变我的方法?

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)来定位所有瓶子。忽略放置区域内正确的检测(例如使用 hough 线)。 其余检测描述了错误放置的瓶子。

此外,您可以通过收集和注释相应的图像 (https://de.mathworks.com/help/vision/ref/trainrcnnobjectdetector.html) 来直接训练物体检测器来检测放错地方的瓶子。