生活随笔
收集整理的這篇文章主要介紹了
数字图像处理与Python实现笔记之彩色图像处理初步
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數字圖像處理與Python實現筆記之彩色圖像處理初步 摘要 緒論 1 數字圖像處理基礎知識 2 彩色圖像處理初步 2.1 彩色圖像的顏色空間 2.1.1 RGB顏色空間 2.1.2 HSI顏色空間 2.1.3 RGB和HSI顏色空間的轉換 2.2 偽彩色圖像處理 2.3 基于彩色的圖像分割 2.3.1 HSI顏色空間中的分割 2.3.2 RGB顏色空間中的分割 2.4 彩色圖像的灰度化 2.5 小結 參考資料
摘要
簡要介紹數字圖像處理涉及的一些基本概念、基本運算、基本類型,以及如何通過Python對數字圖像進行讀取和簡單操作。 以彩色圖像為例對數字圖像處理的基本操作進行介紹,熟悉數字圖像處理的基本過程,主要包括顏色空間的基本概念、偽彩色圖像處理操作,彩色圖像處理簡單操作。 瞄準在空間域中對圖像進行增強,介紹空間濾波的機理、基本概念以及使用的基本技術。本章內容包括空間濾波基本概念、基于空間濾波的圖像平滑處理、基于空間濾波的銳化操作以及混合空間增強。 從頻域角度入手對圖像處理及增強方法展開介紹。因為頻域濾波所需的數學知識較多,所以本章采取由淺入深的策略,首先介紹一維傅里葉變換,其次介紹二維傅里葉變換和快速傅里葉變換,最后介紹圖像頻域濾波中出現的各種技術,其大體可分為低通濾波和高通濾波兩大類。 從全局特征提取和局部特征提取兩方面入手,分別介紹顏色特征、紋理特征、形狀特征、邊緣特征、點特征的提取方法。本章內容是目前機器視覺和圖像處理領域的學者關注較多的內容,通過穿插較多的實例,幫助讀者理解圖像特征提取的基本技術。 瞄準如何減少圖像傳輸及存儲數據大小,介紹主要使用的壓縮技術,包括有損壓縮和無損壓縮等,并使用JPEG壓縮技術串講全章知識點。 介紹圖像的小波域表示及多分辨率表示。
緒論
人工智能是引領未來發展的戰略性技術,是新一輪科技革命和產業變革的重要驅動力量,將深刻地改變人類社會生活。
促進人工智能和實體經濟的深度融合,構建數據驅動、人機協同、跨界融合、共創分享的智能經濟形態,更是推動質量變革、效率變革、動力變革的重要途經。
進年來,我國人工智能新技術、新產品、新業態持續涌現,與農業、制造業、服務業等行業的融合步伐明顯加快,在技術創新、應用推廣、產業發展等方面成效初顯。
人工智能技術并不是一個新生事物,它在最近幾年引起全球性關注并得到飛速發展的主要原因,在于它的三個基本要素(算法、數據、算力)的迅猛發展,其中又以數據和算力的發展尤為重要。
物聯網技術的蓬勃發展使得數據累計的難度越來越低,而芯片算力的不斷提升,使得過去只能通過云計算才能完成的人工智能運算,現在可以下沉到最普通的設備上完成。
物聯網技術為機器帶來感知能力,而人工智能則通過計算算力為機器帶來了決策能力,正如感知和大腦對自然生命進化所起到的必然性作用。
1 數字圖像處理基礎知識
https://hulin.blog.csdn.net/article/details/107570020
2 彩色圖像處理初步
對于灰度圖像而言,其每個像素的亮度用一個數值表示即可。而彩色圖像的每個像素包含了顏色信息,每個像素的光強度和色度需用三個數值描述。 研究彩色圖像的主要原因:第一,彩色圖像符合人類視覺特點,人類可以辨別幾千種顏色色調和亮度,但卻只能辨別幾十種灰度層次。第二,彩色可以更好的表達圖像的特征,可根據圖像的顏色特征簡化目標物的區分與識別。
2.1 彩色圖像的顏色空間
彩色圖像的顏色空間也稱為顏色模型和彩色系統,用于對顏色進行描述和說明。常用的顏色空間包括RGB顏色空間和HSI顏色空間。
2.1.1 RGB顏色空間
白光通過玻璃棱鏡會出現紫色到紅色的連續彩色光譜,光由多種色譜構成。
人眼中有大量對紅、綠、藍顏色敏感的追狀體細胞,因此常用RGB顏色空間表達彩色圖像信息。這3種原色的混合色基本覆蓋了人類的色彩空間,從而滿足了人類的色彩體驗。
RGB圖像由三個圖像分量組成,分別是R通道圖像、G通道圖像和B通道圖像。
import skimage
. data
as data
import matplotlib
. pyplot
as pltimage
= data
. coffee
( ) plt
. subplot
( 2 , 2 , 1 )
plt
. title
( 'RGB image' )
plt
. axis
( 'off' )
plt
. imshow
( image
)
imageR
= image
[ : , : , 0 ]
plt
. subplot
( 2 , 2 , 2 )
plt
. title
( 'R image' )
plt
. axis
( 'off' )
plt
. imshow
( imageR
, cmap
= 'gray' )
imageG
= image
[ : , : , 1 ]
plt
. subplot
( 2 , 2 , 3 )
plt
. title
( 'G image' )
plt
. axis
( 'off' )
plt
. imshow
( imageG
, cmap
= 'gray' )
imageB
= image
[ : , : , 2 ]
plt
. subplot
( 2 , 2 , 4 )
plt
. title
( 'B image' )
plt
. axis
( 'off' )
plt
. imshow
( imageB
, cmap
= 'gray' ) plt
. tight_layout
( )
plt
. savefig
( 'im.png' )
2.1.2 HSI顏色空間
HSI顏色空間接近人類視覺感知顏色的方式,包含三個分量分別是:色調(Hue,H),飽和度(Saturation,S),亮度(Intensity,I)
HSI顏色空間圓柱體的橫截面稱為色環,色環更加清晰的展示了色調和飽和度兩個參數
色調H由角度表示,其顏色表示最接近哪個光譜波長。
飽和度S由色環的圓心到顏色點的半徑表示,距離越長表示飽和度越高,顏色越鮮明。
亮度I由顏色點到圓柱底部的距離表示。
圓柱體底部圓心表示黑色,頂部圓心表示白色。
2.1.3 RGB和HSI顏色空間的轉換
RGB轉到HSI顏色空間:將圖像的R、G、B分量分別進行歸一化處理 在RGB顏色空間中,位于空間位置(x,y)的像素點的顏色用該像素點的R分量R(x,y)、G分量G(x,y)以及B分量B(x,y)3個數值表示。在HSI顏色空間中,位于空間位置(x,y)的像素點的H分量、S分量、I分量可由下式計算得出。
from skimage
import data
, io
from matplotlib
import pyplot
as plt
import math
import numpy
as np
import sys
def RGB_to_HSI ( r
, g
, b
) : r
= r
/ 255 g
= g
/ 255 b
= b
/ 255 num
= 0.5 * ( ( r
- g
) + ( r
- b
) ) den
= ( ( r
- g
) * ( r
- g
) + ( r
- b
) * ( g
- b
) ) ** 0.5 if b
<= g
: if den
== 0 : den
= sys
. float_info
. min h
= math
. acos
( num
/ den
) elif b
> g
: if den
== 0 : den
= sys
. float_info
. min h
= ( 2 * math
. pi
) - math
. acos
( num
/ den
) s
= 1 - ( 3 * min ( r
, g
, b
) / ( r
+ g
+ b
) ) i
= ( r
+ g
+ b
) / 3 return int ( h
) , int ( s
* 100 ) , int ( i
* 255 )
image
= data
. coffee
( )
hsi_image
= np
. zeros
( image
. shape
, dtype
= 'uint8' )
for ii
in range ( image
. shape
[ 0 ] ) : for jj
in range ( image
. shape
[ 1 ] ) : r
, g
, b
= image
[ ii
, jj
, : ] h
, s
, i
= RGB_to_HSI
( r
, g
, b
) hsi_image
[ ii
, jj
, : ] = ( h
, s
, i
)
plt
. subplot
( 2 , 4 , 1 )
plt
. imshow
( image
)
plt
. axis
( 'off' )
plt
. title
( 'RGB' )
plt
. subplot
( 2 , 4 , 2 )
plt
. imshow
( image
[ : , : , 0 ] )
plt
. axis
( 'off' )
plt
. title
( 'RGB-R' )
plt
. subplot
( 2 , 4 , 3 )
plt
. imshow
( image
[ : , : , 1 ] )
plt
. axis
( 'off' )
plt
. title
( 'RGB-G' )
plt
. subplot
( 2 , 4 , 4 )
plt
. imshow
( image
[ : , : , 2 ] )
plt
. axis
( 'off' )
plt
. title
( 'RGB-B' )
plt
. subplot
( 2 , 4 , 5 )
plt
. imshow
( hsi_image
)
plt
. axis
( 'off' )
plt
. title
( 'HSI' )
plt
. subplot
( 2 , 4 , 6 )
plt
. imshow
( hsi_image
[ : , : , 0 ] )
plt
. axis
( 'off' )
plt
. title
( 'HSI-H' )
plt
. subplot
( 2 , 4 , 7 )
plt
. imshow
( hsi_image
[ : , : , 1 ] )
plt
. axis
( 'off' )
plt
. title
( 'HSI-S' )
plt
. subplot
( 2 , 4 , 8 )
plt
. imshow
( hsi_image
[ : , : , 2 ] )
plt
. axis
( 'off' )
plt
. title
( 'HSI-I' ) plt
. show
( )
在HSI顏色空間中,假設圖像的S分量的值在[0,1]區間內,位于空間位置(x,y)的像素點的顏色用該像素點的顏色用該像素點的H分量、S分量、I分量3個數值表示。
2.2 偽彩色圖像處理
彩色圖像處理可以分為全彩色圖像處理和偽彩色圖像處理。 全彩色圖像由全彩色傳感器獲取,如數碼相機和彩色掃描儀。 全彩色圖像處理方法分為兩大類:① 分別處理每一分量圖像,然后將處理后的分量圖像合成彩色圖像。② 直接對彩色像素進行處理。 偽彩色圖像處理根據一定的規則對灰度值賦以彩色,將灰度圖像轉化為給定彩色分布的圖像。主要包括強度分層技術和灰度值到彩色變換技術。
2.2.1 強度分層
2.2.2 灰度值到彩色變換
首先對任何像素的灰度值進行3個獨立的變換,然后將3個變換的結果分別作為偽彩色圖像的紅、綠、藍通道的亮度值。 與強度分層技術相比,灰度值到彩色變換更通用。 繪制灰度值到彩色變換的映射關系的代碼如下。
from skimage
import data
, color
from matplotlib
import pyplot
as plt
import numpy
as npL
= 255
def getR ( gray
) : if gray
< L
/ 2 : return 0 elif gray
> L
/ 4 * 3 : return L
else : return 4 * gray
- 2 * L
def getG ( gray
) : if gray
< L
/ 4 : return 4 * gray
elif gray
> L
/ 4 * 3 : return 4 * L
- 4 * gray
return L
def getB ( gray
) : if gray
< L
/ 4 : return L
elif gray
> L
/ 2 : return 0 else : return 2 * L
- 4 * gray
plt
. rcParams
[ 'font.sans-serif' ] = [ 'SimHei' ]
plt
. rcParams
[ 'font.size' ] = 15
plt
. rcParams
[ 'axes.unicode_minus' ] = False
x
= [ 0 , 64 , 127 , 191 , 255 ]
plt
. figure
( )
R
= [ ]
for i
in x
: R
. append
( getR
( i
) )
plt
. plot
( x
, R
, 'r' , label
= '紅色變換' )
plt
. legend
( loc
= 'best' )
plt
. figure
( )
G
= [ ]
for i
in x
: G
. append
( getG
( i
) )
plt
. plot
( x
, G
, 'g' , label
= '綠色變換' )
plt
. legend
( loc
= 'best' )
plt
. figure
( )
B
= [ ]
for i
in x
: B
. append
( getB
( i
) )
plt
. plot
( x
, B
, 'b' , marker
= 'o' , markersize
= '5' , label
= '綠色變換' )
plt
. legend
( loc
= 'best' )
plt
. figure
( )
plt
. plot
( x
, R
, 'r' )
plt
. plot
( x
, G
, 'g' )
plt
. plot
( x
, B
, 'b' , marker
= 'o' , markersize
= '5' ) plt
. show
( )
from skimage
import data
, color
from matplotlib
import pyplot
as plt
import numpy
as npL
= 255
def getR ( gray
) : if gray
< L
/ 2 : return 0 elif gray
> L
/ 4 * 3 : return L
else : return 4 * gray
- 2 * L
def getG ( gray
) : if gray
< L
/ 4 : return 4 * gray
elif gray
> L
/ 4 * 3 : return 4 * L
- 4 * gray
return L
def getB ( gray
) : if gray
< L
/ 4 : return L
elif gray
> L
/ 2 : return 0 else : return 2 * L
- 4 * grayimg
= data
. coffee
( )
gray_img
= color
. rgb2gray
( img
) * 255
color_img
= np
. zeros
( img
. shape
, dtype
= 'uint8' )
for i
in range ( img
. shape
[ 0 ] ) : for j
in range ( img
. shape
[ 1 ] ) : r
, g
, b
= getR
( gray_img
[ i
, j
] ) , getG
( gray_img
[ i
, j
] ) , getB
( gray_img
[ i
, j
] ) color_img
[ i
, j
, : ] = ( r
, g
, b
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( gray_img
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( color_img
) plt
. show
( )
2.3 基于彩色的圖像分割
圖像分割是把圖像分成各具特性的區域并提取出感興趣區域的技術和過程。 基于彩色的圖像分割是在顏色空間中進行圖像分割 基于彩色的圖像分割首先觀察原始彩色圖像的各個分量圖像,利用分量圖像中感興趣區域的特征對感興趣區域進行提取,并弱化背景區域。
2.3.1 HSI顏色空間中的分割
HSI顏色空間是面向顏色處理的,用色調H飽和度S描述色彩,用亮度I描述光的強度。 HSI模型有兩個特點:I 分量與圖像的彩色信息無關,H 分量和S 分量與人感受顏色的方式是緊密相連的。
from skimage
import data
, color
, io
from matplotlib
import pyplot
as plt
import numpy
as np
import math
import sys
def rgb2hsi ( r
, g
, b
) : r
= r
/ 255 g
= g
/ 255 b
= b
/ 255 num
= 0.5 * ( ( r
- g
) + ( r
- b
) ) den
= ( ( r
- g
) * ( r
- g
) + ( r
- b
) * ( g
- b
) ) ** 0.5 if b
<= g
: if den
== 0 : den
= sys
. float_info
. min h
= math
. acos
( num
/ den
) elif b
> g
: if den
== 0 : den
= sys
. float_info
. min h
= ( 2 * math
. pi
) - math
. acos
( num
/ den
) s
= 1 - 3 * min ( r
, g
, b
) / ( r
+ g
+ b
) i
= ( r
+ b
+ g
) / 3 return int ( h
) , int ( s
* 100 ) , int ( i
* 255 ) image
= io
. imread
( r
'Red-Flower.jpg' )
hsi_image
= np
. zeros
( image
. shape
, dtype
= 'uint8' )
for i
in range ( image
. shape
[ 0 ] ) : for j
in range ( image
. shape
[ 1 ] ) : r
, g
, b
= image
[ i
, j
, : ] h
, s
, i
= rgb2hsi
( r
, g
, b
) hsi_image
[ i
, j
, : ] = ( h
, s
, i
) H
= hsi_image
[ : , : , 0 ]
S
= hsi_image
[ : , : , 1 ]
I
= hsi_image
[ : , : , 2 ]
S_template
= np
. zeros
( S
. shape
, dtype
= 'uint8' )
for i
in range ( S
. shape
[ 0 ] ) : for j
in range ( S
. shape
[ 1 ] ) : if S
[ i
, j
] > 0.3 * S
. max ( ) : S_template
[ i
, j
] = 1
F
= np
. zeros
( H
. shape
, dtype
= 'uint8' )
for i
in range ( F
. shape
[ 0 ] ) : for j
in range ( F
. shape
[ 1 ] ) : F
[ i
, j
] = H
[ i
, j
] * S_template
[ i
, j
]
plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( image
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( H
, cmap
= 'gray' ) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( S
, cmap
= 'gray' ) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( I
, cmap
= 'gray' ) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( S_template
, cmap
= 'gray' ) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( F
, cmap
= 'gray' ) plt
. show
( )
2.3.2 RGB顏色空間中的分割
RGB顏色空間中的分割算法是最直接的,得到的分割效果較好。
from skimage
import data
, color
, io
from matplotlib
import pyplot
as plt
import numpy
as np
import mathimage
= io
. imread
( r
'Red-Flower.jpg' )
r
= image
[ : , : , 0 ]
g
= image
[ : , : , 1 ]
b
= image
[ : , : , 2 ]
r_template
= r
[ 128 : 255 , 85 : 169 ]
r_template_u
= np
. mean
( r_template
)
r_template_d
= 0.0
for i
in range ( r_template
. shape
[ 0 ] ) : for j
in range ( r_template
. shape
[ 1 ] ) : r_template_d
= r_template_d
+ ( r_template
[ i
, j
] - r_template_u
) * ( r_template
[ i
, j
] - r_template_u
) r_template_d
= math
. sqrt
( r_template_d
/ r_template
. shape
[ 0 ] / r_template
. shape
[ 1 ] )
r_cut
= np
. zeros
( r
. shape
, dtype
= 'uint8' )
for i
in range ( r
. shape
[ 0 ] ) : for j
in range ( r
. shape
[ 1 ] ) : if r
[ i
, j
] >= ( r_template_u
- 1.25 * r_template_d
) and r
[ i
, j
] <= ( r_template_u
+ 1.25 * r_template_d
) : r_cut
[ i
, j
] = 1
image_cut
= np
. zeros
( image
. shape
, dtype
= 'uint8' )
for i
in range ( r
. shape
[ 0 ] ) : for j
in range ( r
. shape
[ 1 ] ) : if r_cut
[ i
, j
] == 1 : image_cut
[ i
, j
, : ] = image
[ i
, j
, : ] plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( image
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( r
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( g
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( b
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( r_cut
) plt
. figure
( )
plt
. axis
( 'off' )
plt
. imshow
( image_cut
) plt
. show
( )
2.4 彩色圖像的灰度化
灰度圖像能以較少的數據表征圖像的大部分特征,因此在某些算法的預處理階段,需要進行彩色圖像灰度化,提高后續算法的效率。將彩色圖像轉換為灰度圖像的過程稱為彩色圖像灰度化。
在RGB模型中,位于空間位置(x,y)的像素點的顏色用該像素點的R分量、G分量、B分量表示。灰度圖像每個像素用一個灰度值(又稱強度值、亮度值)表示即可。
對RGB圖像進行灰度化處理的常用方法有:最大值灰度化方法、平均值灰度化方法、加權平均灰度化方法。
最大值灰度化方法。將彩色圖像中像素的R分量、G分量和B分量3個數值的最大值作為灰度圖像的灰度值。
平均灰度化方法。對彩色圖像中像素的R分量、G分量和B分量3個數值求平均值作為灰度值。
加權平均灰度化方法。由于人眼對綠色的敏感度最高,對藍色的敏感度最低,因此可以根據重要性對三個分量進行加權平均,得到較合理的灰度值。
from skimage
import data
import matplotlib
. pyplot
as plt
import numpy
as np
image
= data
. coffee
( )
max_gray
= np
. zeros
( image
. shape
[ 0 : 2 ] , dtype
= 'uint8' )
ave_gray
= np
. zeros
( image
. shape
[ 0 : 2 ] , dtype
= 'uint8' )
weight_gray
= np
. zeros
( image
. shape
[ 0 : 2 ] , dtype
= 'uint8' )
for ii
in range ( image
. shape
[ 0 ] ) : for jj
in range ( image
. shape
[ 1 ] ) : r
, g
, b
= image
[ ii
, jj
, : ] max_gray
[ ii
, jj
] = max ( r
, g
, b
) ave_gray
[ ii
, jj
] = ( r
/ 3 + g
/ 3 + b
/ 3 ) weight_gray
[ ii
, jj
] = 0.30 * r
+ 0.59 * g
+ 0.11 * b
plt
. subplot
( 2 , 2 , 1 )
plt
. axis
( 'off' )
plt
. title
( 'image' )
plt
. imshow
( image
) plt
. subplot
( 2 , 2 , 2 )
plt
. axis
( 'off' )
plt
. title
( 'image max_gray' )
plt
. imshow
( max_gray
, cmap
= 'gray' ) plt
. subplot
( 2 , 2 , 3 )
plt
. axis
( 'off' )
plt
. title
( 'image ave_gray' )
plt
. imshow
( ave_gray
, cmap
= 'gray' ) plt
. subplot
( 2 , 2 , 4 )
plt
. axis
( 'off' )
plt
. title
( 'image weight_gray' )
plt
. imshow
( weight_gray
, cmap
= 'gray' ) plt
. tight_layout
( )
plt
. savefig
( 'im.png' )
2.5 小結
本章首先對彩色圖像進行簡要介紹,說明了彩色圖像處理的重要意義。 講述了彩色圖像的顏色空間,RGB顏色空間和HSI顏色空間以及兩種顏色空間的轉換。 講述了偽彩色圖像處理,重點討論了強度分層技術和灰度值到彩色圖像變換技術。 基于彩色的圖像分割,主要討論了基于HSI和RGB的彩色分割。 講述了彩色圖像的灰度化,利用最大值灰度化方法、平均值灰度化方法、加權平均值灰度化方法對RGB圖像進行灰度化處理。
參考資料
岳亞偉《數字圖像處理與Python實現》人民郵電出版社
總結
以上是生活随笔 為你收集整理的数字图像处理与Python实现笔记之彩色图像处理初步 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。