2

当我遇到这个问题时,我正在尝试试验 MatLab 图像处理方法是如何工作的。请参考下面的2张图片图片实际上是书的侧面:

在此处输入图像描述 在此处输入图像描述

右图显示了绑定和计算对象数量的失败尝试。代码如下:

BW2=~BW2;
imshow(BW2)
B = bwboundaries(BW2);
imshow(BW2)

text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
hold on

for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 0.2)
end

该方法取自http://www.instructables.com/id/Image-Processing-and-Counting-using-MATLAB/step5/Find-the-Boundaries-of-the-Objects/

但正如您所见,它并非一直有效。只有大约一半的时间它会起作用。有人知道我可以如何改进计数吗?还是有另一种方法来计算像这样的图像中的斑点?

我之前使用 OpenCV cvBlob 库成功地做到了这一点。但是当谈到 MatLab 时,我是一个新手,因此希望有人能在这方面帮助我。谢谢。

4

2 回答 2

1

这是您可以尝试的一件事,我希望这至少适用于第二个失败的示例:

与其一次只分析整个图像,不如考虑将其切割然后分析。

假设您将其分成 5 列(假设书籍总是躺着),那么您可以执行 5 次分析。之后,您可以以中位数为例,并希望得到更准确的结果。

于 2013-10-25T13:12:21.037 回答
1

首先,如果您只需要知道 blob 的数量,而您不需要它们的边界像素,那bwboundaries就是大材小用了。相反,您可以使用bwconncomp,它只会查找并标记 blob。

其次,似乎这里最大的问题是您正在反转掩码。因此,您实际上是在尝试在后台而不是在前台查找连接的组件。您正在计算书籍之间的空白空间,而不是书籍本身。所以不要做BW2=~BW2;

最后,图像中可能存在由噪声而非书籍引起的斑点。因此,您需要要么拒绝太小的 blob,要么事先对掩码进行一些预处理。例如,您可以尝试形态学打开以消除小的孤立的前景像素块。

PS 另外请看一下regionprops功能。您可能会发现它很有用。

于 2013-10-25T16:54:21.963 回答