如何在红色圆圈中检测不规则放置的瓶子,同时通过Matlab排除那些规则的圆形瓶子?

问题描述 投票:0回答:1

例如,我只想检测那些不规则的瓶子:enter image description here

但是,我尝试了几种方法,但是它们找到了图像中的所有边缘瓶子,有什么方法可以检测到仅倾斜的瓶子,或者我如何更改方法?

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:原始图片:

enter image description here

matlab computer-vision matlab-figure vision
1个回答
0
投票

如果已经足够,一种方法可能是对是否有未正确放置的瓶子进行分类:

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)直接训练对象检测器以检测错放的瓶子。

© www.soinside.com 2019 - 2024. All rights reserved.