【问题标题】:Ignore certain area(roi) in an image while processing in Matlab在 Matlab 中处理时忽略图像中的某些区域(roi)
【发布时间】:2015-03-29 02:11:23
【问题描述】:

我是 Matlab 的新手。我正在尝试 在 Mat-lab 上使用 vision.CascadeObjectDetector 两次找出两个不同的对象(分别 训练),从视频中说 E 和 K。 bbox 和 bbox2 是各自的 ROI。 while循环中的部分代码如下:

videoFrame=step(videoFileReader);
bbox=step(letterDetector_E,videoFrame);
bbox2=step(letterDetector_K,videoFrame);
C = vertcat(bbox,bbox2);
videoOut=insertObjectAnnotation(videoFrame, 'rectangle', C, 'E&K');
step(videoPlayer, videoOut);

我想在查找 bbox2 时忽略 bbox 表示的区域。也就是说,不应该从图像的同一部分找到两个对象(显然这两种对象都有相似之处)。所以我希望屏蔽或忽略 videoFrame 的 bbox 区域,而 bbox2 分配有 step(letterDetector_K, videoFrame) 正在执行。 bbox 的格式为 [xUpperLeft, yUpperLeft, width, 高度]。 我该怎么做。

【问题讨论】:

    标签: matlab image-processing computer-vision matlab-cvst


    【解决方案1】:

    这很容易做到。检测到第一个形状后,使用为第一个对象E 检测到的边界框,然后使用insertShape 在该位置插入一个填充矩形。确保将Opacity 设置为 1.0,这样它就不会将背景中的任何像素混合到此矩形中,并选择与您要检测的对象完全不同的填充矩形的颜色。也许选择黑色。另外,我建议您在绘制矩形时关闭抗锯齿,因为打开它实际上需要更多时间来绘制形状。抗锯齿基本上可以平滑任何形状的边缘。因为您不想包含该区域的信息,所以实际上不需要抗锯齿,因此将其设置为 false。这是通过SmoothEdges 选项完成的。

    完成填充形状后,使用此修改后的帧并检测下一个对象K。因此,您只需要多行代码,请执行以下操作:

    videoFrame=step(videoFileReader);    
    bbox=step(letterDetector_E,videoFrame);
    
    %// NEW - Insert filled rectangle
    videoFrame = insertShape(videoFrame, 'FilledRectangle', bbox, ...
                             'Opacity', 1.0, 'Color', 'black', ...
                             'SmoothEdges', false);
    
    %// Now detect next shape on modified frame
    bbox2=step(letterDetector_K,videoFrame);
    
    C = vertcat(bbox,bbox2);
    videoOut=insertObjectAnnotation(videoFrame, 'rectangle', C, 'E&K');
    step(videoPlayer, videoOut);
    

    insertShape 的工作原理是它接收图像(在您的情况下为 videoFrame),然后您指定 FilledRectangle 标志和边界框位置,这与您使用的 4 元素数组完全一致描述,也就是左上角的xy,后面是矩形的宽度和高度。我们将在这个位置放置一个填充的矩形。然后,我们在绘制矩形之前为它指定更多选项,例如将不透明度设置为 1.0,将颜色设置为黑色并关闭抗锯齿。我们输出插入了这个矩形的修改后的帧,我将在其中改变videoFrame,以便对您的代码进行最少的编辑。然后您将使用videoFrame 检测下一个形状。

    【讨论】:

    • 谢谢...这很有帮助
    • 我的荣幸。祝你好运!
    • 请...还有一个帮助...我试图通过对象检测找出某些字母。现在我的问题是,我必须提取单词的连续字母。实际上,它错误地发现了一些误报。我想避免它。实际的字母显然在附近连续(在 x 轴上)放置。有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多