作为我自己的教育练习,我正在编写一个可以平均一堆图像的应用程序。这通常用于天文摄影以减少噪音。
我正在使用的库是 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)是访问图像中像素的缓慢方法?有更快的方法吗?