c++ - OpenCV-如何将RGB图像投影到日志(R/G)〜日志(B/G)空间?

标签 c++ opencv mat logarithm color-space

我正在尝试将RGB图像投影到日志(R / G)〜日志(B / G)坐标系中。

根据herehere的定义,日志(R / G)〜日志(B / G)空间的计算如下:

enter image description here

基本上,我想要两个数组X和Y(我将Mat用作数组),其中:

enter image description here

enter image description here

这是我尝试过的:

计算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);

但是,当我尝试其余说明来获得结果时,我的结果根本看起来不像他们的结果。

enter image description here

计算内在图像:

    Mat intrinsic;
    intrinsic = X * cos(alpha) + Y * sin(alpha);
    imshow("intrinsic", intrinsic);

我认为我在计算X*Y*矩阵时做错了。因为当我尝试使用alpha的任何值来执行此操作时,结果提示不正确:

这是图像:

enter image description here

这是预期的结果:

enter image description here

这就是我得到的:

enter image description here

这是第一篇论文的屏幕截图:
enter image description here

最佳答案

一个小问题(对不起,我无法发表评论):

不应使用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);
以及如何计算α?

编辑
enter image description here

这是您的2nd posted source的屏幕截图。

如您所见,灰度图像G inv是通过X_star:intrinsic = X_star * cos(alpha) + Y_star * sin(alpha);计算的。
您发布的第一个方程式也是如此。

我无法访问您发布的第一个链接,它不是免费的。

关于c++ - OpenCV-如何将RGB图像投影到日志(R/G)〜日志(B/G)空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60423881/

相关文章:

c++ - 以编程方式修改/创建 vcproj 文件

python - 如何检测给定图像中的所有矩形框

ios - OpenCV - 无法访问 Mat 中的所有像素

opencv - OpenCV 中的 const Mat 引用有意义吗?

matlab - K 均值聚类,主要理解问题

javascript - 有没有办法在 JavaScript 中将 OpenCV.Mat 转换为数组?

c++ - 我可以从基类指针访问派生类的非虚函数吗?

c++ - 从 C++ 中的字节数组中提取非零索引的最快方法是什么

c++ - 使用phoenix绑定(bind)到结构来增强精神规则 - 编译失败

c++ - opencv realsense 16位深度图像