如何通过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检测红色圆圈中不规则放置的瓶子,同时排除那些规则圆形瓶子?的主要内容,如果未能解决你的问题,请参考以下文章
css 中的li 里面默认的黑色点如何换成红色的,然后圆圈变大
如何使用openCV准确检测这张图片上的棕色/黑色/灰色/白色