灰度图像着色
用某种颜色对图像进行人工着色很有用,可以突出显示图像的特定区域,也可以只是激活灰度图像。本例通过缩放RGB值和调整HSV颜色空间中的颜色来演示图像着色。
在二维图像中,彩色图像通常表示为二维阵列的RGB-3层,其中3层表示图像的(R)ED,(G)REEN和(B)LUE通道。获取着色图像的最简单方法是将每个RGB通道设置为每个通道使用不同的乘数缩放的灰度图像。例如,将绿色通道和蓝色通道相乘0只留下红色通道,并生成明亮的红色图像。同样地,将蓝色通道归零只留下红色和绿色通道,它们组合成黄色。
import matplotlib.pyplot as plt
from skimage import data
from skimage import color
from skimage import img_as_float
%matplotlib inline
grayscale_image = img_as_float(data.camera()[::2, ::2]) # 表示[起始位置:终止位置:间隔距离] ,[::2, ::2]即行列缩小一半
image = color.gray2rgb(grayscale_image) #灰度单通道转为三通道
red_multiplier = [1, 0, 0] #[r,g,b]
yellow_multiplier = [1, 1, 0]
fig, (ax1, ax2,ax3) = plt.subplots(ncols=3, figsize=(18,5),
sharex=True, sharey=True)
ax1.imshow(red_multiplier * image)
ax2.imshow(yellow_multiplier * image)
ax3.imshow(grayscale_image,'gray')
#ax4.imshow(image)
在许多情况下,处理RGB值可能不理想。因此,有许多其他颜色空间可以用来表示颜色图像。一种流行的颜色空间称为hsv,它表示色调(颜色)、饱和度(色彩)和值(~亮度)。例如,一种颜色(色调)可能是绿色,但它的饱和度是绿色的强度——橄榄色在低端,霓虹色在高端。
在一些实现中,hsv中的色调从0变为360,因为色调环绕在一个圆中。然而,在Scikit-image中,色调是从0到1的浮点值,因此色调、饱和度和值都具有相同的比例。
下面,在色调中绘制一个线性渐变,饱和度和值一直向上:
import numpy as np
hue_gradient = np.linspace(0, 1)
print(hue_gradient)
hsv = np.ones(shape=(1, len(hue_gradient), 3), dtype=float