我正在为实体(但不是矩形)对象生成投影。输入是灰度图像,表示对象的不透明度。然后我想模糊它,给它上色,并将它画在对象后面。
最常见的是,此图像将具有相同阴影的大型连续区域,这意味着如果我执行标准模糊算法,则会浪费大部分图像的周期。考虑下面的输入和输出:
所有模糊工作都需要在边缘进行,但大平面区域的工作只是浪费,并且代表了超过90%的像素。
是否存在模糊此类图像的常用算法,该算法比模糊任意输入图像快得多?最终代码将是在GPU硬件不可用的环境中执行的Java应用程序的一部分。
答案 0 :(得分:1)
我不相信有一个特定的算法可用于此。因为图像是单色的,所以在检测过渡的2次通过(水平和垂直)中实现线扫描算法可能相对简单,并且发现转换在该点应用模糊。
例如,您可以扫描每隔三行(和列),并且在过渡时应用半径为3的模糊。您可以使用间隔/半径来查找最佳平衡。或者,在水平传球上仅应用水平模糊,类似地在垂直传球上应用垂直模糊。
或者,您可能会放弃这种方法,并查看非高斯模糊,例如2遍1维正交卷积滤波器。根据模糊算子的imagemagick页面,简单卷积滤波器的速度可以比基于高斯的滤波器速度高10倍或更快。 2遍1维卷积滤波器正在执行类似于上面的线扫描(通过执行水平和垂直通道),但它适用于整个图像(甚至是实心区域)。但是将“边缘检测”与正交模糊相结合,您可能能够实现显着的加速。虽然为了不混淆算法,但扫描的图像不应该就地修改,而应该修改第二个“目的地”图像。