【发布时间】:2018-09-02 08:26:34
【问题描述】:
我在 C# 中编写了一个位掩码过滤器,用于增长边框,如果有足够的空间,找到的像素应该增长边框,但区域可能不会相互接触
input mask output mask
.......... .....xxx...
.....x.... .....xxxx...
.....x.... xxx..xxxxxx.
..x..xxxx. xxx..xxxxxx.
.......... xxx..xxxxxx.
使用 5x5 二进制卷积检查边界。
边框由 8 个像素组成 (x-2,y-2)、(x,y-2)、(x+2,y-2)... 即边框的角和中心。
如果找到一个像素,我将其对应的数组P[i] 设置为true。
所以这 8 个像素表示在一个布尔数组中,从P[0] 低谷p[7] 开始。
接下来我计算布尔值trues。
如果P[.] > 3 的计数,那么附近还有另一个对象,我不会在那里增加边框。
如果计数为 1,例如(x-2,y)==true,则写掩码(x-1,y)。
如果计数是 2,那么如果例如 (x+2,y)==true && (x+2,y+2)==true 则写掩码 (x+1,y+1)。
我有很多布尔比较来最终完成这项工作。 我不会让你厌烦无聊的代码,但我想知道我使用的原理是否适合这个,或者是否有其他方法可以做到这一点。
因为我得到了一个副作用(虽然不是真正的问题),这使得形状在每次迭代中都更加立体。这在 PhotoShop 等程序中似乎很少发生。
=====
一些附加信息,代码必须在视频流上运行,所以我更喜欢快速的方法。我写了“枯燥”的代码,如果我要打印它,它的 80+ 行大部分是二进制比较代码,并且 switch case 也使它很快,80+ 是一个很长的帖子,用普通语言解释时更容易理解。
【问题讨论】:
-
我把你的文字“binary convulsion”改成了“binary convolution”,我想这就是你想写的。但是,我不知道什么是二元卷积。您似乎实现了一个在 5x5 邻域中工作的自定义二进制过滤器。
-
哈哈,谢谢,我不是英国人。
标签: c# image-processing computer-vision