绘制多边形并评估像素

时间:2018-11-21 12:18:17

标签: c++ directx

我正在尝试使用GPU加速(DirectX / C ++)在2D图像上绘制多边形。

绘制完成后,我要遍历所有像素并对其进行评估,以获取最终/生成图像的“得分”(与目标图像比较)。最终分数应从GPU返回。

我知道从GPU读取会有很大的开销,但是我想要GPU而不是CPU(GDI +或openCV)的渲染速度。

我正在做类似EvoLisa的事情。

实现此目标的最佳方法是什么?

目前对分数的评估如下:

// Render image
cv::Mat generatedImage = EvoRenderer::render(individual, heigth, width, dimension, corners, parameters);

// Evaluate generated image
double* colors = new double[generatedImage.channels()];
for (int i = 0; i < generatedImage.channels(); ++i) {
    colors[i] = double(0.0);
}
for (int j = 0; j < this->heigth; ++j)
    for (int i = 0; i < this->width; ++i)
    {           
        RGB& targetRGB = targetImage.ptr<RGB>(j)[i];
        RGB& generatedRGB = generatedImage.ptr<RGB>(j)[i];

        colors[0] += fabs(targetRGB.blue - generatedRGB.blue);
        colors[1] += fabs(targetRGB.green - generatedRGB.green);
        colors[2] += fabs(targetRGB.red - generatedRGB.red);
    }

long double error = 0;
const double divider = 255.0 * this->width * this->heigth;
for (int i = 0; i < generatedImage.channels(); i++)
    error += colors[i] / divider;
error *= double(100.0);

// Set fitnes to current individual
individual.setEval(error);

// Delete pointers
delete[] colors;

0 个答案:

没有答案