Я пытаюсь проецировать изображение RGB в log (R / G) ~ log (B / G) систему координат.
Согласно определению здесь и здесь log (R / G) ~ log (B / G) пространство вычисляется следующим образом:
По сути, я хочу два массива X и Y (я использую Mat в качестве массива), где:
Это то, что я пробовал:
вычисление X * и Y *:
Mat input = imread("an RGB image");
Mat X, Y, B, G, R, input_f;
input.convertTo(input_f, CV_32FC3);
vector<Mat> channels(3);
split(input_f, channels);
B = channels[0];
G = channels[1];
R = channels[2];
//-- calculate X , Y vectors
Mat div_x, div_y;
divide(R, G, div_x);
divide(B, G, div_y);
log(div_x, X);
log(div_y, Y);
X.setTo(0, Mat(X < 0));
Y.setTo(0, Mat(Y < 0));
//-- calculate X* , Y* vectors
Mat X_star, Y_star;
Scalar x_bar = mean(X);
Scalar y_bar = mean(Y);
subtract(X, Scalar(x_bar), X_star);
subtract(Y, Scalar(y_bar), Y_star);
Но когда я пытаюсь выполнить остальные инструкции для получения результата, мой результат совсем не похоже на их.
вычисление intrinsi c image:
Mat intrinsic;
intrinsic = X * cos(alpha) + Y * sin(alpha);
imshow("intrinsic", intrinsic);
Я думаю, что я что-то не так при расчете матриц X*
и Y*
. Потому что, когда я пытаюсь это сделать с любым значением alpha
, результат dow не становится правильным:
Это изображение:
Это ожидаемый результат:
Вот что я получаю:
Вот скриншот первой статьи: