圖像數據類型及顏色空間轉換


一 圖像數據類型轉換

在skimage中,一張圖片就是一個簡單的numpy數組,數組的數據類型有很多種,相互之間可以轉換。這些數據類型及取值范圍如下表所示:

一張圖片的像素值范圍是[0,255], 因此默認類型是unit8, 可用如下代碼查看數據類型:

from skimage import io,data img=data.astronaut() print(img.dtype.name)

結果為:uint8

1.1 unit8轉float

from skimage import data,img_as_float img=data.astronaut() print(img.dtype.name) dst=img_as_float(img) print(dst.dtype.name)

結果如下所示:

uint8
float64

1.2 float轉uint8

from skimage import img_as_ubyte import numpy as np img = np.array([0, 0.5, 1], dtype=float) print(img.dtype.name) dst=img_as_ubyte(img) print(dst.dtype.name)

結果如下所示:

float64
uint8

除了上述的兩種轉換,還有一些常見的轉換,將他們一同整理到下表之下:

Function name Description
img_as_float Convert to 64-bit floating point.
img_as_ubyte Convert to 8-bit uint.
img_as_uint Convert to 16-bit uint.
img_as_int Convert to 16-bit int.

二 顏色空間及其轉換

如前所述,除了直接轉換可以改變數據類型外,還可以通過圖像的顏色空間轉換來改變數據類型。常用的顏色空間有灰度空間、rgb空間、hsv空間和cmyk空間。顏色空間轉換以后,圖片類型都變成了float型。所有的顏色空間轉換函數,都放在skimage的color模塊內。

2.1 rgb轉灰度圖

from skimage import io,data,color img=data.astronaut() gray=color.rgb2gray(img) io.imshow(gray)

結果如下所示:

其它的轉換,用法都是一樣的,列舉常用的如下:

skimage.color.rgb2grey(rgb)

skimage.color.rgb2hsv(rgb)

skimage.color.rgb2lab(rgb)

skimage.color.gray2rgb(image)

skimage.color.hsv2rgb(hsv)

skimage.color.lab2rgb(lab)

基於上述的轉換,有幾點需要說明:

  • Lab顏色空間中的L分量用於表示像素的亮度,取值范圍是[0,100],表示從純黑到純白;a表示從紅色到綠色的范圍,取值范圍是[127,-128]b表示從黃色到藍色的范圍,取值范圍是[127,-128]
  • HSV顏色空間指的是色調、飽和度和明度

2.2 rgb轉hsv

實際上,上面的所有轉換函數,都可以用一個函數來代替:skimage.color.convert_colorspace(arrfromspacetospace)表示將arr從fromspace顏色空間轉換到tospace顏色空間。

from skimage import io,data,color img=data.astronaut() hsv=color.convert_colorspace(img,'RGB','HSV') io.imshow(hsv)

結果如下圖所示:

2.3 顏色空間轉換中其他重要的函數

在color模塊的顏色空間轉換函數中,還有一個比較有用的函數是

                                 skimage.color.label2rgb(arr)

可以根據標簽值對圖片進行着色。以后的圖片分類后着色就可以用這個函數。

例:將astronaut圖片分成三類,然后用默認顏色對三類進行着色

from skimage import io,data,color import numpy as np img=data.astronaut() gray=color.rgb2gray(img) rows,cols=gray.shape labels=np.zeros([rows,cols]) for i in range(rows): for j in range(cols): if(gray[i,j]<0.4): labels[i,j]=0 elif(gray[i,j]<0.75): labels[i,j]=1
        else: labels[i,j]=2 dst=color.label2rgb(labels) io.imshow(dst)

結果如下圖所示:

參考:https://www.cnblogs.com/denny402/p/5122328.html


免責聲明!

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



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