OpenCV - 如何将 RGB 图像投影到 log (R/G) ~ log (B/G) space?
OpenCV - How to project RGB image to log (R/G) ~ log (B/G) space?
我正在尝试将 RGB 图像投影到 log (R/G) ~ log (B/G) 坐标系。
根据定义here and herelog(R/G)~log(B/G)space计算如下:
基本上,我想要两个数组 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
的任何值尝试这个时,结果 dows 不正确:
这是图片:
这是预期的结果:
这就是我得到的:
这是第一篇论文的截图:
一个小问题(抱歉,我还不能评论):
不应该 X
intrinsic = X * cos(alpha) + Y * sin(alpha);
改为X_star
?
intrinsic = X_star * cos(alpha) + Y_star * sin(alpha);
否则你可以写subtract(X, Scalar(x_bar), X);
你是如何计算 α 的?
编辑
这是您 2nd posted source 的屏幕截图。
如你所见,灰度图G inv 是通过你的X_star
:intrinsic = X_star * cos(alpha) + Y_star * sin(alpha);
计算出来的。
您发布的第一个方程式也是如此。
我无法访问您发布的第一个 link,它不是免费的。
我正在尝试将 RGB 图像投影到 log (R/G) ~ log (B/G) 坐标系。
根据定义here and herelog(R/G)~log(B/G)space计算如下:
基本上,我想要两个数组 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
的任何值尝试这个时,结果 dows 不正确:
这是图片:
这是预期的结果:
这就是我得到的:
这是第一篇论文的截图:
一个小问题(抱歉,我还不能评论):
不应该 X
intrinsic = X * cos(alpha) + Y * sin(alpha);
改为X_star
?
intrinsic = X_star * cos(alpha) + Y_star * sin(alpha);
否则你可以写subtract(X, Scalar(x_bar), X);
你是如何计算 α 的?
编辑
这是您 2nd posted source 的屏幕截图。
如你所见,灰度图G inv 是通过你的X_star
:intrinsic = X_star * cos(alpha) + Y_star * sin(alpha);
计算出来的。
您发布的第一个方程式也是如此。
我无法访问您发布的第一个 link,它不是免费的。