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

Posted

技术标签:

【中文标题】如何通过Matlab检测红色圆圈中不规则放置的瓶子,同时排除那些规则圆形瓶子?【英文标题】:How to detect irregular placed bottles in the red circle while exclude those regular circle bottle by Matlab? 【发布时间】:2020-09-17 20:26:43 【问题描述】:

我只想检测那些不规则的瓶子,例如红色圆圈中的:

但是,我尝试了几种方法,但他们发现图像中的所有边缘瓶子,有没有办法只检测倾斜的瓶子或者我如何改变我的方法?

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 = Bk;
   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】:

如果它已经足够了,一种方法可以是分类是否有任何瓶子没有正确放置:

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

【讨论】:

以上是关于如何通过Matlab检测红色圆圈中不规则放置的瓶子,同时排除那些规则圆形瓶子?的主要内容,如果未能解决你的问题,请参考以下文章

循环数组矩阵matlab

如何显示可以出现在红色圆圈中的最近标记?

css 中的li 里面默认的黑色点如何换成红色的,然后圆圈变大

如何使用openCV准确检测这张图片上的棕色/黑色/灰色/白色

如何放置稳定的标记(图像上的实心圆圈)。下一帧相机中哪个位置相同?

如何将手绘红色圆圈添加到 ggplot2 图中?