如何在Python OpenCV中绘制图像对数色度图

时间:2017-12-10 00:02:02

标签: python image opencv colors rgb

我正在尝试使用OpenCV在python中创建2D日志色度图。这里也问了同样的问题

How to compute 2D log-chromaticity?

但它从未得到过回答。

ASIDE:猜测轴必须是对数而不是线性,但这是不正确的,因为纸张使用负坐标,并且对数轴不能为负。此外,我是绝望的并尝试了plt.xscale('log')plt.yscale('log'),但它没有用。)

这项工作是基于这篇论文:

https://www.cs.sfu.ca/~mark/ftp/Eccv04/

(我在下面再提一下)

我的代码:

import numpy as np
import cv2
import os
import matplotlib.pyplot as plt

root = r'.\path\to\root'
root = r'my_img.jpg'

if __name__ == '__main__':

    img = cv2.imread(os.path.join(root, fl))

    cv2.imshow('Original', img)
    cv2.waitKey(0)

    b, g, r = cv2.split(img)

    img_sum = np.sum(img, axis = 2) # NOTE: This dtype will be uint32.
                                    #       Each channel can be up to
                                    #       255 (dtype = uint8), but
                                    #       since uint8 can only go up
                                    #       to 255, sum naturally uint32

    # "Normalized" channels
    # NOTE: np.ma is the masked array library. It automatically masks
    #       inf and nan answers from result

    n_r = np.ma.divide(1.*r, g)
    n_b = np.ma.divide(1.*b, g)

    log_rg = np.ma.log( n_r )
    log_bg = np.ma.log( n_b )

    plt.scatter(l_rg, l_bg, s = 2)
    plt.xlabel('Log(R/G)')
    plt.ylabel('Log(B/G)')
    plt.title('2D Log Chromaticity')
    plt.show()

输入:

Color Checker Chart

结果:

My Log Chromaticity Plot

预期结果:

Finlayson Log Chromaticity Plot

预期结果取自本文("熵最小化的内在图像",:Finlayson,G。等人):

https://www.cs.sfu.ca/~mark/ftp/Eccv04/

(论文也在上面提到)

你能帮我吗?!

1 个答案:

答案 0 :(得分:1)

这是我能想到的最接近的。通读这个:

http://www2.cmp.uea.ac.uk/Research/compvis/Papers/DrewFinHor_ICCV03.pdf

我发现了这句话:

  

&#34图。图2(a)显示了Macbeth ColorChecker Chart的24个表面的对数色度,(六个中性色块都属于同一色度   群集)。如果我们现在改变照明绘制中值   对于每个补丁,我们看到图2(b)中的曲线。"

如果仔细观察对数色度图,您会看到19个斑点,对应于Macbeth图表中18种颜色中的每种颜色,加上底行中所有6个灰度目标的总和:

对数色度的说明

使用1张图片,我们每个blob只能获得1个点:我们在每个目标中取中值并绘制它。要从纸上获取情节,我们必须创建具有不同光照的多个图像。我们可以通过在图像编辑器中改变图像的温度来实现这一点。

现在,我只是查看原始图像中的色块并绘制了点:

<强>输入:

Color Patches Used

<强>输出:

Log Chromaticity

图形点并非与纸张在同一个地方,但我觉得它相当接近。有人请检查我的工作,看看这是否有意义?