1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【学习 OpenCV】—— 色彩空间(RGB HSV rgb2hsv rgb2gray 的实现)

【学习 OpenCV】—— 色彩空间(RGB HSV rgb2hsv rgb2gray 的实现)

时间:2021-01-18 00:46:56

相关推荐

【学习 OpenCV】—— 色彩空间(RGB HSV rgb2hsv rgb2gray 的实现)

RGB 色彩空间的基础是对叠加型三原色(红绿蓝)的应用。之所以选择它们,是因为把它们组合起来后可以产生色域很宽(256*256*256)的各种颜色。实际上,人类的视觉系统( Human visual system,HVS)也是基于对三原色的感知,因为视锥细胞的灵敏度位于红绿蓝的光谱周围。这通常是数字成像中默认的色彩空间,因为这就是人类看数字图像的方式。

但是,利用 RGB 色彩空间计算颜色之间的差距,并不是衡量两个颜色相似度(similarity)的最好方式。RGB 并不是感知均匀的色彩空间。也就是说,两种具有一定差距的颜色可能看起来非常接近,而另外两种具有同样差距的颜色看起来却差别很大。

未解决这个问题,引入了一些具有感知均匀特性的颜色表示法。CIEL*a*b* 就是一种这样的颜色模型。把图像转换到这种表示法后,我们就可以真正地使用图像像素与目标颜色之间的欧氏距离,来度量颜色之间的视觉相似度。

0. rgb2gray 的实现

def rgb2gray(rgb):return np.dot(rgb[..., :3], [0.299, 0.587, 0.144])

1. rgb2hsv

HSV,H:hue,S:saturation,V:value

[0, 255] ⇒ [0, 1],也即将原始的 rgb 3 通道上的 256 级灰度值,线性压缩在 0-1 区间内;

R′=R/255,G′=G/255,B′=B/255Cmax=max(R′,G′,B′),Cmin=min(R′,G′,B′),Δ=Cmax−Cmin

此时便可以计算 hsv 了:

H=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪0°,60°⋅(G′−B′Δmod6),60°⋅(B′−R′Δ+2),60°⋅(R′−G′Δ+4),Δ=0R′=CmaxG′=CmaxB′=Cmax,S=⎧⎩⎨0,ΔCmax,Cmax=0Cmax≠0,V=Cmax

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。