Java 针对相同颜色的大面积区域优化的图像模糊

Java 针对相同颜色的大面积区域优化的图像模糊,java,graphics,Java,Graphics,我正在为实体(但不是矩形)对象生成阴影。输入是表示对象不透明度的灰度图像。然后我想模糊它,给它上色,然后在物体后面画出来 最常见的情况是,该图像将具有相同阴影的大连续区域,这意味着如果我使用标准模糊算法,我将浪费绝大多数图像的周期。考虑下面的输入和输出: 所有的模糊工作都需要在边缘进行,但是在大平面区域上的工作只是浪费,并且代表了超过90%的像素 有没有比模糊任意输入图像快得多的常用算法来模糊这类图像?最后的代码将是在GPU硬件不可用的环境中执行的Java应用程序的一部分。我不相信有一个特定的

我正在为实体(但不是矩形)对象生成阴影。输入是表示对象不透明度的灰度图像。然后我想模糊它,给它上色,然后在物体后面画出来

最常见的情况是,该图像将具有相同阴影的大连续区域,这意味着如果我使用标准模糊算法,我将浪费绝大多数图像的周期。考虑下面的输入和输出:

所有的模糊工作都需要在边缘进行,但是在大平面区域上的工作只是浪费,并且代表了超过90%的像素


有没有比模糊任意输入图像快得多的常用算法来模糊这类图像?最后的代码将是在GPU硬件不可用的环境中执行的Java应用程序的一部分。

我不相信有一个特定的算法可用于此。因为图像是单色的,所以在2个过程(水平和垂直)中实现检测过渡的线扫描算法可能相对简单,并且在发现过渡后在该点应用模糊

例如,您可以每三行(和列)扫描一次,并在过渡处应用半径为3的模糊。您可以使用间隔/半径来找到最佳平衡。或者,在水平过程中仅应用水平模糊,在垂直过程中同样应用垂直模糊


或者,您可能会放弃所有这些方法,然后看看非高斯模糊,例如2通1维正交卷积滤波器。根据他们的模糊算子页面,简单卷积滤波器的速度可能比基于高斯的滤波器快10倍或更大。2通一维卷积滤波器的作用类似于上面的线扫描(通过执行水平和垂直通),但它适用于整个图像(甚至是实体区域)。但是,将“边缘检测”与正交模糊相结合,可能可以实现显著的加速。尽管为了不混淆算法,扫描的图像不应修改到位,而应修改第二个“目的地”图像。

我认为没有具体的算法可用于此。因为图像是单色的,所以在2个过程(水平和垂直)中实现检测过渡的线扫描算法可能相对简单,并且在发现过渡后在该点应用模糊

例如,您可以每三行(和列)扫描一次,并在过渡处应用半径为3的模糊。您可以使用间隔/半径来找到最佳平衡。或者,在水平过程中仅应用水平模糊,在垂直过程中同样应用垂直模糊


或者,您可能会放弃所有这些方法,然后看看非高斯模糊,例如2通1维正交卷积滤波器。根据他们的模糊算子页面,简单卷积滤波器的速度可能比基于高斯的滤波器快10倍或更大。2通一维卷积滤波器的作用类似于上面的线扫描(通过执行水平和垂直通),但它适用于整个图像(甚至是实体区域)。但是,将“边缘检测”与正交模糊相结合,可能可以实现显著的加速。虽然为了不混淆算法,扫描的图像不应修改到位,而应修改第二个“目的地”图像。

如果您事先不知道图像的“感兴趣”位在哪里,则需要查找它们。我敢打赌,计算是否应该对特定像素执行模糊几乎和实际应用模糊本身一样困难。对于一个足够大的图像来说,这一切都可能由缓存性能决定……如果您事先不知道图像中“有趣”的部分在哪里,那么您需要寻找它们。我敢打赌,计算是否应该对特定像素执行模糊几乎和实际应用模糊本身一样困难。对于一个足够大的图像,这一切可能都将由缓存性能决定。。。