Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程图像缩放_Java_Multithreading_Image_Scaling_Multicore - Fatal编程技术网

Java多线程图像缩放

Java多线程图像缩放,java,multithreading,image,scaling,multicore,Java,Multithreading,Image,Scaling,Multicore,我们目前正在使用Java JAI方法在我们的产品“Intermedia FotoFacient”中进行图像处理。我正在寻找一种图像缩放算法或一种在双核/四核CPU上使用多个线程进行缩放的实现。本机加速将是一个很大的优势 提前感谢一个想法是将图像分成矩形区域-每个核心一个-然后让每个核心只重新缩放其中一个区域。由于范围不重叠,您可能可以在不进行任何锁定的情况下执行此操作。这是对templatetypedef建议的肯定(和补充),这是一个可靠的建议 首先,您需要确保使用多个线程来执行此操作——然后J

我们目前正在使用Java JAI方法在我们的产品“Intermedia FotoFacient”中进行图像处理。我正在寻找一种图像缩放算法或一种在双核/四核CPU上使用多个线程进行缩放的实现。本机加速将是一个很大的优势


提前感谢

一个想法是将图像分成矩形区域-每个核心一个-然后让每个核心只重新缩放其中一个区域。由于范围不重叠,您可能可以在不进行任何锁定的情况下执行此操作。

这是对templatetypedef建议的肯定(和补充),这是一个可靠的建议

首先,您需要确保使用多个线程来执行此操作——然后JVM和OS调度程序将决定如何在必要时跨多个内核生成和负载平衡本机线程。您无法控制这一点(有关更多信息,请在谷歌搜索“java多核处理器支持”)

第二,您将要查看如何使用来切碎图像,并从中提取部分进行处理

注:大多数图像算法使用单个像素周围的区域来计算新的缩放量。。。各种各样的平均数。因此,沿着要切掉的部分的内部边缘小心,以包括超出所需的额外像素,以便缩放算法为您提供更精确的颜色值

更具体地说,假设你切掉图像的左上角进行处理,那么它的尺寸从0,0开始,延伸到150150。您将希望剪切为160x160,以便沿该右剪切线和底部剪切线计算的所有像素值更精确,而不仅仅是在其右侧或底部分别与零混合

现在,当你要重新组装你的图像时,扔掉那些切片边缘上的“缓冲区”空间,因为你不再需要它们了,你只需要用它们来平均图像缩放算法

这种对处理器友好的总体方法将需要大约3倍于每个图像的内存来处理(这通常是这些类型的处理器友好方法的方式)

你有:

  • 原始图像
  • 原始图像数据的4倍四分之一切片拷贝
  • 在缩放操作期间,可能有一个时间点,JVM将保留所有4倍四分之一的切片拷贝及其4倍的缩小版本。我们假设在缩放操作返回之前,您可以冲洗/处理原始的4个切片
  • 在重新组装的时刻,您仍然拥有原始图像(除非您刷新了它?),然后是4个较小的四分之一和一个完整大小的重新组装实例

  • 3倍的内存需求可能是最糟糕的情况,但请注意。

    您是否有任何关于算法的信息材料,可以用于源图像分幅?这是一个非常高质量的答案,谢谢Riyad。我将建立一个原型。