Нарисуйте полигон и оцените пиксели - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь использовать ускорение графического процессора (DirectX / C ++) для рисования многоугольника на 2D-изображении.

После завершения рисования я хочу пройтись по всем пикселям и оценить их, чтобы получить «оценку» финала /сгенерированное изображение (сравните с целевым изображением).Затем следует вернуть окончательный результат из графического процессора.

Я знаю, что при чтении из графического процессора возникают большие накладные расходы, но мне нужна скорость рендеринга графического процессора, а не процессора (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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...