如何循环通过一个二值图像列检测前5个非零像素在一行?
4次浏览(最近30天)
显示旧的注释
我有一组二进制图像,从中我需要按列扫描它们的像素值。如果一行中有“x”个非零像素,算法需要识别出这一点,以便在识别出“x”个非零像素的行中绘制一条直线或完全将所有像素转换为“1”。这是为了关闭图像的一个区域,然后计算被它包围的区域。
我开始循环图像,然后将像素值保存在一个变量中。然后我添加了一个计数器,以便从它正在分析的列中计算非零像素的总数。然而,我遇到了这个循环的问题,因为它需要在一行中计数5个非零像素。如果它后面跟着一个0像素,那么它就是应该关闭的地方,但如果它后面跟着另一个非0像素,这意味着它不是感兴趣的区域。这是到目前为止我所拥有的,但它对图像没有任何影响:
[rows,columns] = size(I3);
Cont = 0;
为Column = 1:表示列
为Row = 1:表示行
pixel = I3(行,列);
如果(像素== 1)
Cont = Cont +1;
结束
如果(像素== 0)
Cont = 0;
结束
如果(cont == 5)
如果像素== 1
Cont = 0;
结束
如果像素== 0
I3(行,列)= 1;
打破
结束
结束
结束
结束
数字
imshow (I3)
提前谢谢你。我的matlab技能只是基本的,所以我对这种循环有困难。
任何帮助都非常感激。
接受的答案
Harikrishnan Balachandran Nair
2021年9月21日
编辑:Harikrishnan Balachandran Nair
2021年9月21日
你好,
我知道您正在尝试对图像进行逐列遍历,并查看是否在任何列中有两个连续的非零像素,如果有超过2个连续的非零像素,您将跳转到下一列。
在这种情况下,您可能希望在遍历下一列之前将计数器值重置为零。
此外,如果发现两个连续的非零像素,则应检查列中下一个像素的值,然后将相应行的像素合并为一个。
下面的代码可能会有所帮助。
[rows,columns] = size(I3);图像大小%
Cont = 0;初始化计数器
为J = 1:列水平读数%
续= 0;
为I = 1:行%垂直读数
如果(I3 (i, j) = = 0)
续= 0;
其他的
续=续+ 1;
如果(续= = 2)
如果行(我= = | | I3 (i + 1, j) = = 0)%检查是否有第三个非零像素
I3(我:)= 1;
结束
打破
结束
结束
结束
结束
数字
imshow (I3);