【发布时间】:2020-06-10 21:56:41
【问题描述】:
我正在尝试将 RGB 图像投影到 log (R/G) ~ log (B/G) 坐标系。
根据here和here的定义,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);
但是当我尝试其余的指令以获得结果时,我的结果与他们的完全不同。
计算内在图像:
Mat intrinsic;
intrinsic = X * cos(alpha) + Y * sin(alpha);
imshow("intrinsic", intrinsic);
我认为我在计算 X* 和 Y* 矩阵时做错了。因为当我尝试使用 alpha 的任何值时,结果不会正确:
这是图片:
这是预期的结果:
这就是我得到的:
【问题讨论】:
标签: c++ opencv mat logarithm color-space