作为自我教育的一部分,我正在编写一个可以平均一堆图像的应用程序。这在天文摄影中经常用于降噪。
我使用的库是Magick++,并且我已经成功地编写了应用程序。但不幸的是,它很慢。这是我使用的代码:
这段代码通过遍历每个像素并将每个通道的像素强度添加到一个双精度向量中,从而对10个图像进行平均。函数avg然后将向量作为参数并计算平均值。这个平均值然后用于stackedImage中相应的像素 - 这是结果图像。它可以正常工作,但是我不满意速度。在Core i5机器上需要2分30秒。这些图像是8兆像素和16位TIFF。我知道这是很多数据,但我已经看到其他应用程序更快地完成了这项工作。
我的循环慢还是pixelColor(x,y)是访问图像中像素的一种缓慢方式?有更快的方法吗?
我使用的库是Magick++,并且我已经成功地编写了应用程序。但不幸的是,它很慢。这是我使用的代码:
for(row=0;row<rows;row++)
{
for(column=0;column<columns;column++)
{
red.clear(); blue.clear(); green.clear();
for(i=1;i<10;i++)
{
ColorRGB rgb(image[i].pixelColor(column,row));
red.push_back(rgb.red());
green.push_back(rgb.green());
blue.push_back(rgb.blue());
}
redVal = avg(red);
greenVal = avg(green);
blueVal = avg(blue);
redVal = redVal*MaxRGB; greenVal = greenVal*MaxRGB; blueVal = blueVal*MaxRGB;
Color newRGB(redVal,greenVal,blueVal);
stackedImage.pixelColor(column,row,newRGB);
}
}
这段代码通过遍历每个像素并将每个通道的像素强度添加到一个双精度向量中,从而对10个图像进行平均。函数avg然后将向量作为参数并计算平均值。这个平均值然后用于stackedImage中相应的像素 - 这是结果图像。它可以正常工作,但是我不满意速度。在Core i5机器上需要2分30秒。这些图像是8兆像素和16位TIFF。我知道这是很多数据,但我已经看到其他应用程序更快地完成了这项工作。
我的循环慢还是pixelColor(x,y)是访问图像中像素的一种缓慢方式?有更快的方法吗?
.clear()
调用或等价物,因为你知道你将在内部循环中覆盖旧项。 - AShelly