python的skimage庫 圖像色彩空間轉換 RGB到灰度;RGB到HSV


RGB 到 grayscale

from skimage.color import rgb2gray
grayscale = rgb2gray(original)

"""
================
RGB to grayscale
================

This example converts an image with RGB channels into an image with a single
grayscale channel.

The value of each grayscale pixel is calculated as the weighted sum of the
corresponding red, green and blue pixels as::

        Y = 0.2125 R + 0.7154 G + 0.0721 B

"""
import matplotlib.pyplot as plt

from skimage import data
from skimage.color import rgb2gray

original = data.astronaut()
grayscale = rgb2gray(original)

fig, axes = plt.subplots(1, 2, figsize=(8, 4))
ax = axes.ravel()

ax[0].imshow(original)
ax[0].set_title("Original")
ax[1].imshow(grayscale, cmap=plt.cm.gray)
ax[1].set_title("Grayscale")

fig.tight_layout()
plt.show()

左圖:RGB圖像;右圖:灰度圖像

RGB 到 HSV

from skimage.color import rgb2hsv
hsv_img = rgb2hsv(rgb_img)

實驗:將杯子從背景中簡單分離

"""
==========
RGB to HSV
==========

This example illustrates how RGB to HSV (Hue, Saturation, Value) conversion 
can be used to facilitate segmentation processes.

Usually, objects in images have distinct colors (hues) and luminosities, so
that these features can be used to separate different areas of the image.
In the RGB representation the hue and the luminosity are expressed as a linear
combination of the R,G,B channels, whereas they correspond to single channels
of the HSV image (the Hue and the Value channels). A simple segmentation of the
image can then be effectively performed by a mere thresholding of the HSV
channels.

"""


import matplotlib.pyplot as plt

from skimage import data
from skimage.color import rgb2hsv

##############################################################################
# We first load the RGB image and extract the Hue and Value channels:

rgb_img = data.coffee()
hsv_img = rgb2hsv(rgb_img)
hue_img = hsv_img[:, :, 0]
value_img = hsv_img[:, :, 2]

fig, (ax0, ax1, ax2) = plt.subplots(ncols=3, figsize=(8, 2))

ax0.imshow(rgb_img)
ax0.set_title("RGB image")
ax0.axis('off')
ax1.imshow(hue_img, cmap='hsv')
ax1.set_title("Hue channel")
ax1.axis('off')
ax2.imshow(value_img)
ax2.set_title("Value channel")
ax2.axis('off')

fig.tight_layout()

##############################################################################
# We then set a threshold on the Hue channel to separate the cup from the
# background:

hue_threshold = 0.04
binary_img = hue_img > hue_threshold
# print(hue_img) # 圖像數值矩陣
# print(binary_img) # True or False 的一個矩陣

fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(8, 3))

# 參數2:bins
ax0.hist(hue_img.ravel(), 512)
ax0.set_title("Histogram of the Hue channel with threshold")
# 設置1條垂直於x軸的紅色的虛線
ax0.axvline(x=hue_threshold, color='r', linestyle='dashed', linewidth=2)
# 設置x軸范圍
ax0.set_xbound(0, 0.12)
ax1.imshow(binary_img)
ax1.set_title("Hue-thresholded image")
ax1.axis('off')

fig.tight_layout()

##############################################################################
# We finally perform an additional thresholding on the Value channel to partly
# remove the shadow of the cup:

fig, ax0 = plt.subplots(figsize=(4, 3))

value_threshold = 0.10
binary_img = (hue_img > hue_threshold) | (value_img < value_threshold)

ax0.imshow(binary_img)
ax0.set_title("Hue and value thresholded image")
ax0.axis('off')

fig.tight_layout()
plt.show()

figure 1
figure 2
figure 3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM