Java多线程图像缩放
我们目前正在使用Java JAI方法在我们的产品“Intermedia FotoFacient”中进行图像处理。我正在寻找一种图像缩放算法或一种在双核/四核CPU上使用多个线程进行缩放的实现。本机加速将是一个很大的优势Java多线程图像缩放,java,multithreading,image,scaling,multicore,Java,Multithreading,Image,Scaling,Multicore,我们目前正在使用Java JAI方法在我们的产品“Intermedia FotoFacient”中进行图像处理。我正在寻找一种图像缩放算法或一种在双核/四核CPU上使用多个线程进行缩放的实现。本机加速将是一个很大的优势 提前感谢一个想法是将图像分成矩形区域-每个核心一个-然后让每个核心只重新缩放其中一个区域。由于范围不重叠,您可能可以在不进行任何锁定的情况下执行此操作。这是对templatetypedef建议的肯定(和补充),这是一个可靠的建议 首先,您需要确保使用多个线程来执行此操作——然后J
提前感谢一个想法是将图像分成矩形区域-每个核心一个-然后让每个核心只重新缩放其中一个区域。由于范围不重叠,您可能可以在不进行任何锁定的情况下执行此操作。这是对templatetypedef建议的肯定(和补充),这是一个可靠的建议 首先,您需要确保使用多个线程来执行此操作——然后JVM和OS调度程序将决定如何在必要时跨多个内核生成和负载平衡本机线程。您无法控制这一点(有关更多信息,请在谷歌搜索“java多核处理器支持”) 第二,您将要查看如何使用来切碎图像,并从中提取部分进行处理 注:大多数图像算法使用单个像素周围的区域来计算新的缩放量。。。各种各样的平均数。因此,沿着要切掉的部分的内部边缘小心,以包括超出所需的额外像素,以便缩放算法为您提供更精确的颜色值 更具体地说,假设你切掉图像的左上角进行处理,那么它的尺寸从0,0开始,延伸到150150。您将希望剪切为160x160,以便沿该右剪切线和底部剪切线计算的所有像素值更精确,而不仅仅是在其右侧或底部分别与零混合 现在,当你要重新组装你的图像时,扔掉那些切片边缘上的“缓冲区”空间,因为你不再需要它们了,你只需要用它们来平均图像缩放算法 这种对处理器友好的总体方法将需要大约3倍于每个图像的内存来处理(这通常是这些类型的处理器友好方法的方式) 你有:
3倍的内存需求可能是最糟糕的情况,但请注意。您是否有任何关于算法的信息材料,可以用于源图像分幅?这是一个非常高质量的答案,谢谢Riyad。我将建立一个原型。