《HALCON機器視覺與算法原理編程實踐》第8章 圖像的形態學處理-學習筆記

8.1 腐蝕與膨脹

在經閾值處理提取出目標區域的二值圖像之後,區域邊緣可能並不理想,這時可以使用腐蝕或膨脹操作對區域進行“收縮”或“擴張”。

8.1.1 結構元素

設有兩幅圖象B,X。若X是被處理的對象,而B是用來處理X的,則稱B爲結構元素(structure element),又被形象地稱做刷子。結構元素通常都是一些比較小的圖象。

8.1.2 腐蝕

腐蝕是對所選區域進行“收縮”的一種操作,可以用於消除邊緣和雜點。

read_image (Image, 'data/board')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
gen_image_proto (GrayImage, ImageCleared, 0)
erosion_circle (Region, RegionErosion, 7.5)
erosion_circle (RegionErosion, RegionErosion2, 6.5)
dev_clear_window ()
dev_display (RegionErosion2)

在這裏插入圖片描述
◆腐蝕特點:對於去除圖像分割後物體的突出區域以及區域邊界的凸區域具有很好的效果。
◆腐蝕分類:根據腐蝕結構元的形狀,在halcon中分爲圓形腐蝕以及矩形腐蝕等。
erosion_circle() 圓形腐蝕
erosion_rectangle1() 矩形腐蝕
◆灰度圖像的腐蝕:擴大暗色背景,腐蝕亮色區域
gray_erosion_rect()
◆灰度圖像的膨脹:擴大亮色背景,腐蝕暗色區域
gray_dilation_rect()

8.1.3 膨脹

與腐蝕相反,膨脹是對選取進行“擴大”的一種操作

read_image (Image, 'data/board')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
erosion_circle (Region, RegionErosion, 7.5)
erosion_circle (RegionErosion, RegionErosion2, 6.5)
erosion_circle (RegionErosion2, RegionErosion3, 5.5)
*膨脹操作
dilation_circle (RegionErosion3, RegionDilation, 23.5)
dev_clear_window ()
dev_display (RegionDilation)

在這裏插入圖片描述
◆膨脹特點:對於填補圖像分割後物體的空洞以及區域邊界的凹陷區域具有很好的效果。
◆膨脹分類:根據膨脹結構元的形狀,在halcon中分爲圓形膨脹以及矩形膨脹等。
dilation_circle() 圓形膨脹
dilation_rectangle1() 矩形膨脹

8.2 開運算與閉運算

腐蝕與膨脹是形態學運算的基礎,在實際檢測過程中,常常需要組合運用腐蝕與膨脹對圖像進行處理。
在這裏插入圖片描述

8.2.1 開運算(先腐蝕,後膨脹)

在這裏插入圖片描述
通過開運算能取出一些孤立的、細小的點,平滑毛糙的邊緣線,同時原區域面積也不會有明顯的改變,類似於一種“去毛刺”的效果。

◆開運算:對區域先進行腐蝕操作,然後對腐蝕的結果再進行膨脹操作,稱爲開運算。
◆開運算特點:具有與腐蝕相似的特點,但是能夠防止區域腐蝕過度,能夠很好的保持區域的形狀。
opening_circle()
opening_rectangle1()

*讀取待檢測的圖像
read_image (Image,'data/board') 
*將圖像轉換爲單通道的灰度圖像
rgb1_to_gray(Image, GrayImage)
*創建矩形區域
gen_rectangle1 (Rectangle, 259, 87, 957, 909)
*進行裁剪,將感興趣區域單獨提取出來
reduce_domain (GrayImage, Rectangle, ImageReduced)
*使用閾值處理將灰度值於設定的像素選取出來
threshold(ImageReduced,Light,85,255)
*創建圓形結構元素,用於開運算
gen_circle(StructElement,6,6,7)
*進行開運算去除背景中的雜點
opening(Light,StructElement,Large)
dev_clear_window ()
dev_display (Large)

8.2.2 閉運算(先膨脹,後腐蝕)

在這裏插入圖片描述
通俗的說,就是一種類似於“填空隙”的效果。

◆閉運算:對區域先進行膨脹操作,然後對膨脹的結果再進行腐蝕操作,稱爲閉運算。
◆閉運算特點:具有與膨脹相似的特點,但是能夠防止區域膨脹過度,能夠很好的保持區域的形狀。
closing_circle()
closing_rectangle1()

read_image (Image,'data/shapes')
*將圖像進行通道分解,分別轉換爲三個通道的RGB圖像
decompose3 (Image, Red, Green, Blue)
*使用顏色轉換將RGB三個通道圖像轉化爲HSV通道的圖像
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*對飽和度通道的圖像進行閾值處理
threshold (Saturation, Regions, 180, 255)
*創建圓形結構元素用於閉運算
gen_circle(StructElement,10,10,10)
*對圖像中較亮的區域進行閉運算處理,填補了各自輪廓中的小空隙
closing(Regions,StructElement,Large)

dev_clear_window ()
dev_display (Large)

8.3 頂帽運算與底帽運算

頂帽運算與底帽運算就是在開運算與閉運算的基礎上,來處理圖像中的各種雜點、空洞、小的間隙、毛糙的邊緣等。

8.3.1 頂帽運算

頂帽運算的原理是用原始的二值圖像減去開運算的圖像。開運算的目的是“移除”某些局部像素,如去毛邊、斷開相鄰的邊緣等。而頂帽運算正式用來提取這些被移除的部分。

read_image (Image,'data/board') 
rgb1_to_gray(Image, GrayImage)
gen_rectangle1 (Rectangle, 259, 87, 957, 909)
reduce_domain (GrayImage, Rectangle, ImageReduced)
threshold(ImageReduced,Light,85,255)
gen_circle(StructElement,6,6,7)
*清理顯示窗口,以便顯示結果
dev_clear_window ()
*進行頂帽運算,得到了開運算中移除的局部像素並高亮顯示
top_hat (Light, StructElement, RegionTopHat)

dev_clear_window ()
dev_display (RegionTopHat)

8.3.2 底帽運算

底帽運算的原理是用原始的二值圖像減去閉運算的圖像。閉運算的目的是對某些局部區域進行“填補”,如填空洞、使分離的邊緣相連接等。而底帽運算正是用來提取這些用於填補的區域的。

read_image (Image,'data/shapes')
decompose3 (Image, Red, Green, Blue)
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
threshold (Saturation, Regions, 180, 255)
gen_circle(StructElement,10,10,10)
*清理顯示窗口,以便顯示結果
dev_clear_window ()
*清理顯示窗口,以便顯示結果
bottom_hat (Regions, StructElement, RegionBottomHat)
dev_clear_window ()
dev_display (RegionBottomHat)

8.3.3 頂帽運算與底帽運算的應用

(1)提取小的物件
(2)校正非均勻光照

*讀取一幅光照不均勻的亮背景圖像,這裏選取的是一幅彩色圖像
read_image (Image,'data/shapes')
*變換之前轉爲灰度圖像
rgb1_to_gray (Image, GrayImage)
*將圖像通過閾值處理轉化爲二值化圖像。
threshold (GrayImage, Regions, 145, 255)
*創建一個結構元素,這裏創建的是一個圓形
gen_circle(StructElement,10,10,100)
*清空窗口便於顯示結果
dev_clear_window ()
*進行底帽操作,提取出較暗區域
bottom_hat (Regions, StructElement, RegionBottomHat)
*將較暗區域從原圖中提取出來
reduce_domain (Image, RegionBottomHat, ImageReduced)

dev_clear_window ()
dev_display (ImageReduced)

8.4 灰度圖像的形態學運算

灰度圖像的形態學運算也可以理解爲針對暗背景、亮目標的圖像進行的運算。

read_image (ImageColor, 'data/village.jpg')
*將原始圖像轉換爲灰度圖像作爲形態學處理的輸入
rgb1_to_gray (ImageColor, Image)
*進行灰度圖像腐蝕操作
gray_erosion_shape (Image, ImageMin, 11, 11, 'octagon')
*進行灰度圖像膨脹操作
gray_dilation_shape (Image, ImageMax, 11, 11, 'octagon')
*進行灰度圖像開運算操作
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
*進行灰度圖像閉運算操作
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章