目錄
銳化(高通)空間濾波器
平滑通過稱為低通濾波 類似于積分運算 銳化通常稱為高通濾波 微分運算 高過(負責細節的)高頻,衰減或抑制低頻
使用一階導數銳化圖像-梯度
在圖像處理中,一階導數是用梯度幅度實現的,圖像的梯度定義為二維列向量 ?f≡grad(f)=[gxgy]=[?f/?x?f/?y](3.57)\nabla f \equiv \text{grad}(f) = \begin{bmatrix} g_x \\ g_y \end{bmatrix} = \begin{bmatrix} \partial f /\partial x \\ \partial f /\partial y \ \end{bmatrix} \tag{3.57} ? f ≡ grad ( f ) = [ g x ? g y ? ? ] = [ ? f / ? x ? f / ? y ? ? ] ( 3 . 5 7 )
向量?f\nabla f ? f 的幅度表示為M(x,y)M(x, y) M ( x , y ) ,也經常使用向量范數∥?f∥\lVert\nabla f \rVert ∥ ? f ∥ M(x,y)=∥f∥=mag(?f)=gx2+gy2(3.58)M(x, y) = \lVert f \rVert = \text{mag}(\nabla f) = \sqrt{g_x^2 + g_y^2} \tag{3.58} M ( x , y ) = ∥ f ∥ = mag ( ? f ) = g x 2 ? + g y 2 ? ? ( 3 . 5 8 )
是梯度向量方向的變化率在(x,y)(x, y) ( x , y ) 處的值,是與原圖像大小相同的圖像,通常稱為梯度圖像
在某些實現中,使用絕對值來近似平方運算和平方根運算更合適: M(x,y)≈∣gx∣+∣gy∣(3.59)M(x,y) \approx |g_x| + |g_y| \tag{3.59} M ( x , y ) ≈ ∣ g x ? ∣ + ∣ g y ? ∣ ( 3 . 5 9 )
這個表達式通常會損失各向同性。
最簡近似的一階導數是gx=(z8?z5)g_x = (z_8 - z_5) g x ? = ( z 8 ? ? z 5 ? ) 和gy=(z6?z5)g_y = (z_6 - z_5) g y ? = ( z 6 ? ? z 5 ? )
羅伯特交叉梯度算子 ,早期的圖像處理使用交叉差值
gx=(z9?z5)和gy=(z8?z6)(3.60)g_x = (z_9 - z_5)和g_y = (z_8 - z_6) \tag{3.60} g x ? = ( z 9 ? ? z 5 ? ) 和 g y ? = ( z 8 ? ? z 6 ? ) ( 3 . 6 0 ) 梯度圖像計算為: M(x,y)=[(z9?z5)2+(z8?z6)2]1/2(3.61)M(x, y) = \Big[(z_9 - z_5)^2 + (z_8 - z_6)^2 \Big]^{1/2} \tag{3.61} M ( x , y ) = [ ( z 9 ? ? z 5 ? ) 2 + ( z 8 ? ? z 6 ? ) 2 ] 1 / 2 ( 3 . 6 1 ) M(x,y)≈∣z9?z5∣+∣z8?z6∣(3.62)M(x, y) \approx |z_9 - z_5| + |z_8 - z_6| \tag{3.62} M ( x , y ) ≈ ∣ z 9 ? ? z 5 ? ∣ + ∣ z 8 ? ? z 6 ? ∣ ( 3 . 6 2 )
3×33\times 3 3 × 3 的核 gx=?f/?x=(z7+2z8+z9)?(z1+2z2+z3)(3.63)g_x = \partial f/ \partial x = (z_7 + 2z_8 + z_9) - (z_1 +2z_2 + z_3) \tag{3.63} g x ? = ? f / ? x = ( z 7 ? + 2 z 8 ? + z 9 ? ) ? ( z 1 ? + 2 z 2 ? + z 3 ? ) ( 3 . 6 3 ) gy=?f/?y=(z3+2z6+z9)?(z1+2z4+z7)(3.64)g_y = \partial f/ \partial y = (z_3 + 2z_6 + z_9) - (z_1 +2z_4 + z_7) \tag{3.64} g y ? = ? f / ? y = ( z 3 ? + 2 z 6 ? + z 9 ? ) ? ( z 1 ? + 2 z 4 ? + z 7 ? ) ( 3 . 6 4 ) M(x,y)=[gx2+gy2]1/2=[[(z7+2z8+z9)?(z1+2z2+z3)]2+[(z3+2z6+z9)?(z1+2z4+z7)]2]1/2(3.65)M(x, y) = [g_x^2 + g_y^2]^{1/2} = \Big[[(z_7 + 2z_8 + z_9) - (z_1 +2z_2 + z_3)]^2 + [(z_3 + 2z_6 + z_9) - (z_1 +2z_4 + z_7)]^2\Big]^{1/2} \tag{3.65} M ( x , y ) = [ g x 2 ? + g y 2 ? ] 1 / 2 = [ [ ( z 7 ? + 2 z 8 ? + z 9 ? ) ? ( z 1 ? + 2 z 2 ? + z 3 ? ) ] 2 + [ ( z 3 ? + 2 z 6 ? + z 9 ? ) ? ( z 1 ? + 2 z 4 ? + z 7 ? ) ] 2 ] 1 / 2 ( 3 . 6 5 )
def visualize_show_annot ( img_show
, img_annot
, ax
, string
= 'img_annot' ) : """add annotation to the image, values of each pixelparam: img: input imageparam: ax: axes of the matplotlib""" height
, width
= img_annot
. shapeimg_show
= img_show
[ : height
, : width
] ax
. imshow
( img_show
, cmap
= 'gray' , vmin
= 0 , vmax
= 255 ) thresh
= 10 for x
in range ( height
) : for y
in range ( width
) : if string
== 'img_annot' : ax
. annotate
( str ( round ( img_annot
[ x
] [ y
] , 2 ) ) , xy
= ( y
, x
) , horizontalalignment
= 'center' , verticalalignment
= 'center' , color
= 'white' if img_annot
[ x
] [ y
] > thresh
else 'black' ) else : ax
. annotate
( string
+ str ( x
+ y
+ 1 ) , xy
= ( y
, x
) , horizontalalignment
= 'center' , verticalalignment
= 'center' , color
= 'white' if img_annot
[ x
] [ y
] > thresh
else 'black' )
height
, width
= 3 , 3
img_show
= np
. ones
( [ height
, width
] , dtype
= np
. uint8
) * 250
img_ori
= np
. zeros
( [ height
, width
] , dtype
= np
. uint8
) fig
= plt
. figure
( figsize
= ( 8 , 6 ) )
ax1
= fig
. add_subplot
( 2 , 3 , 1 )
ax1
. set_title
( '3x3 Region' ) , visualize_show_annot
( img_show
, img_ori
, ax1
, string
= 'z' ) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] ) img_ori
= np
. zeros
( [ 2 , 2 ] , np
. int )
img_ori
[ 0 , 0 ] = - 1
img_ori
[ 1 , 1 ] = 1
ax2
= fig
. add_subplot
( 2 , 3 , 2 )
ax2
. set_title
( 'Robert operator' ) , visualize_show_annot
( img_show
, img_ori
, ax2
) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] ) img_ori
= np
. zeros
( [ 2 , 2 ] , np
. int )
img_ori
[ 0 , 1 ] = - 1
img_ori
[ 1 , 0 ] = 1
ax3
= fig
. add_subplot
( 2 , 3 , 3 )
ax3
. set_title
( 'Robert operator' ) , visualize_show_annot
( img_show
, img_ori
, ax3
) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] ) img_ori
= np
. zeros
( [ 3 , 3 ] , np
. int )
img_ori
[ 0 , : ] = np
. array
( [ - 1 , - 2 , - 1 ] )
img_ori
[ 2 , : ] = np
. array
( [ 1 , 2 , 1 ] )
ax4
= fig
. add_subplot
( 2 , 3 , 4 )
ax4
. set_title
( 'Sobel operator' ) , visualize_show_annot
( img_show
, img_ori
, ax4
) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] ) img_ori
= np
. zeros
( [ 3 , 3 ] , np
. int )
img_ori
[ : , 0 ] = np
. array
( [ - 1 , - 2 , - 1 ] )
img_ori
[ : , 2 ] = np
. array
( [ 1 , 2 , 1 ] )
ax5
= fig
. add_subplot
( 2 , 3 , 5 )
ax5
. set_title
( 'Sobel operator' ) , visualize_show_annot
( img_show
, img_ori
, ax5
) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] ) plt
. tight_layout
( )
plt
. show
( )
img_ori
= cv2
. imread
( "DIP_Figures/DIP3E_Original_Images_CH03/Fig0342(a)(contact_lens_original).tif" , 0 ) sobel_x
= np
. zeros
( [ 3 , 3 ] , np
. int )
sobel_x
[ 0 , : ] = np
. array
( [ - 1 , - 2 , - 1 ] )
sobel_x
[ 2 , : ] = np
. array
( [ 1 , 2 , 1 ] ) sobel_y
= np
. zeros
( [ 3 , 3 ] , np
. int )
sobel_y
[ : , 0 ] = np
. array
( [ - 1 , - 2 , - 1 ] )
sobel_y
[ : , 2 ] = np
. array
( [ 1 , 2 , 1 ] )
gx
= cv2
. filter2D
( img_ori
, ddepth
= - 1 , kernel
= sobel_x
)
gy
= cv2
. filter2D
( img_ori
, ddepth
= - 1 , kernel
= sobel_y
) gx
= np
. where
( gx
>= 100 , gx
, 0 )
gx
= np
. where
( gx
< 100 , gx
, 1 )
gy
= np
. where
( gy
>= 100 , gy
, 0 )
gy
= np
. where
( gy
< 100 , gy
, 1 )
img_sobel
= abs ( gx
) + abs ( gy
)
img_sobel
= np
. uint8
( normalize
( img_sobel
) * 255 ) plt
. figure
( figsize
= ( 15 , 12 ) )
plt
. subplot
( 1 , 2 , 1 ) , plt
. imshow
( img_ori
, 'gray' , vmax
= 255 ) , plt
. title
( "Original" ) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] )
plt
. subplot
( 1 , 2 , 2 ) , plt
. imshow
( img_sobel
, 'gray' , vmax
= 255 ) , plt
. title
( "Sobel" ) , plt
. xticks
( [ ] ) , plt
. yticks
( [ ] )
plt
. tight_layout
( )
plt
. show
( )
梯度還可用來突出灰度級圖像中很難看到的小尺度圖像(如異物、保護液中的氣泡或鏡片中的微小缺陷)。在平坦的灰度場中增強小的不連續的能力是梯度的呬個重要特征
總結
以上是生活随笔 為你收集整理的第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。