我想计算图片中任意形状的黑色像素数。可能有几个对象,如底部的图片。
我怀疑这个问题可以通过动态编程解决,即逐行遍历像素并添加黑色像素。我只是不知道如何正确统一两个部分的大小。
我很确定有哪些算法可以解决我的问题,但我显然使用了错误的搜索词。
请你为我提供一个好的(快速)算法,如果算法是用c ++编写的,并且与OpenCV库中的Mat兼容,可以给予奖励积分。 ;)
此(缩放)图片的结果类似于:左上角为15,大斑点为60,...
答案 0 :(得分:1)
我想我找到了一个解决方案(显然更好的解决方案!):
将大小计算整合到Connected Component Algorithm。
在Connected Component算法中,我们生成一个新的Image,其中有标签(数字)而不是黑色像素。一个区域的所有像素都具有相同的标签。
CC-Algo的新功能是一个表格,其中存储了每个标签的总像素数。这样我知道每个连接组件的大小都是正确的。
Process the image from left to right, top to bottom:
1.) If the next pixel to process is white:
do nothing
2.) If the next pixel to process is black:
i.) If only one of its neighbors (top or left) is black, copy its label and +1 in the size table for that label.
ii.) If both are black and have the same label, copy it and +1 in the size table for that label.
iii.) If they have different labels Copy the label from the left. Update the equivalence table and +1 in the size table for the left label.
iv.) Otherwise, assign a new label and update the size table with that label and value 1.
• Re-label with the smallest of equivalent labels and update size table accordingly
答案 1 :(得分:1)
问题可以通过以下方式使用洪水填充来解决: -
- 保持2-D布尔数组以跟踪最初设置为false的像素是否已被访问
- 逐像素扫描图像。
- 如果像素未被访问且黑色则应用洪水填充,
- 在洪水填充计数期间,呼叫次数也标记访问过的像素,因为它们是连接的像素数。
- 遇到白色像素时终止填充。
- Count是包含像素的区域的大小。
醇>
答案 2 :(得分:0)
如果我不熟悉,在像你的样本一样的图像中,你希望你的alogirthm为每个黑色形状返回6个值。并且,每个值都是黑色像素的数量。
我将使用的算法如下: