Halcon 學習筆記--形態學(5)


一、二值化與灰度圖像

1、 二值化圖像只有兩個元素之分0和1—非黑即白

 算子:

binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
參數:
Image:需要進行閾值的圖像
Region:處理后的區域
Method:分割方法('max_separability':最大限度的可分性, 'smooth_histo':直方圖平滑)
LightDark:提取的是黑色部分還是白色部分
UsedThreshold:自動閾值使用的閾值值
描述:
binary_threshold通過一個自動確定的全局閾值並返回區域中的分段區域來分割單通道圖像。例如:在同質照明的背景下對字符的分割很有用。binary_threshold還會返回UsedThreshold中使用的閾值。
所使用的閾值是由方法中給出的方法決定的。目前,操作符提供了以下兩種方法:“max_separability”和“smooth_histo”。這兩種方法都只能用於具有雙峰直方圖的圖像。
方法“smooth _histo”提供了由操作員bin_threshold提供的相同功能。方法“max_separability”傾向於為UsedThreshold確定較小的值。此外,它對柱狀圖中的稀疏孤立峰不太敏感,而且往往比“平滑”要快得多。
最大限度的可分性(max_separability):
通過選擇Method= ' max_separability ',根據“灰度直方圖的閾值選擇方法”的灰度直方圖自動閾值調用。該算法首先計算圖像的直方圖,然后利用統計矩找到將像素分割為前景和背景的最優閾值,並最大化這兩個類之間的可分性。此方法僅適用於byte和uint2圖像。
直方圖平滑(smooth_histo):
通過選擇Method = 'smooth_histo ' binary_threshold可以通過以下方式確定閾值:首先確定灰度值的相對直方圖。然后,從直方圖提取相關的最小值,作為閾值操作的參數。為了減少最小值,直方圖被平滑處理為一個高斯函數,就像在auto_threshold中一樣。在平滑直方圖中,掩模尺寸增大,直到最小值。然后,閾值設置為這個最小值的位置。
看效果:
當LightDark=light,max_separability選的區域比smooth_histo少一點
當LightDark=dark,max_separability選的區域比smooth_histo多一點 
另:
bin_threshold:二值化閾值,自動地全局閾值方法,使用Threshold找到兩個波峰之間的最小值,分割出來的是非黑即白。 
二值化的方法:(參考:http://blog.csdn.net/jia20003/article/details/8074627)

方法一:掃描圖像的每個像素值,值小於127的將像素值設為0(黑色),值大於等於127的像素值設為255(白色)。該方法的好處是計算量少速度快。

方法二:計算像素的平均值K,掃描圖像的每個像素值如像素值大於K像素值設為255(白色),值小於等於K像素值設為0(黑色)。

方法三:使用直方圖方法來尋找二值化閾值,直方圖是圖像的重要特質,直方圖方法選擇二值化閾值主要是發現圖像的兩個最高的峰,然后在閾值取值在兩個峰之間的峰谷最低處。

2、灰度圖也是黑白圖像,由黑到白是一個漸變過程。

算子

rgb1_to_gray

二、形態學

          腐蝕和膨脹是對白色部分(高亮部分)而言的,不是黑色部分。膨脹就是圖像中的高亮部分進行膨脹,“領域擴張”,效果圖擁有比原圖更大的高亮區域。腐蝕就是原圖中的高亮部分被腐蝕,“領域被蠶食”,效果圖擁有比原圖更小的高亮區域。
1、膨脹
         增加圖像白色像素的個數,及白色區域變多。對於二值化圖像,就是求出二值化圖像被覆蓋的區域與掩模像素的交集,如有是1,則掩模的中心覆蓋的二值化圖像像素就是1,則反之;而對於灰度圖來說是求出交集中像素的最大值作為新的像素。
      

 

算子:

dilation1(Region, StructElement:RegionDilation:Iterations:)
功能: 使用用戶自定義的結構元素對區域進行膨脹。結果元素是一個區域region,可由這些算子區域產生:gen_circle, gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, draw_region_polygon, gen_region_points等。
參數: Region(輸入參數):輸入區域 
StructElement(輸入參數):結構元素(區域)
RegionDilation(輸出參數):膨脹后的區域
Iterations(輸入參數):迭代次數
 
dilation2(Region, StructElement:RegionDilation:Row, Column, Iterations)
功能:根據參考點,使用用戶自定義的結構元素對區域進行膨脹。具體用法參見erosion2.
參數: Region(輸入參數):輸入區域 
StructElement(輸入參數):結構元素 
RegionDilation(輸出參數):膨脹后的區域 
Row(輸入參數):參考點行坐標
Column(輸入參數):參考點列坐標 
Iterations(輸入參數):迭代次數 
 
dilation_circle(Region:RegionDilation:Radius:)
功能:使用圓形結構元素對區域進行膨脹。
參數: Region(輸入參數):輸入區域 
RegionDilation(輸出參數):膨脹后的區域 
Radius(輸入參數):圓形結構元素的半徑 
 
dilation_rectangle1(Region:RegionDilation:Width, Height:)
功能:使用矩形結構元素對區域進行膨脹
參數: Region(輸入參數):輸入區域 
RegionDilation(輸出參數):膨脹后的區域 
Width(輸入參數):矩形結構元素的寬度 
Height(輸入參數):矩形結構元素的高度 

 

2、腐蝕

       減少圖像白色像素的個數,及白色區域減少。對於二值化圖像,就是求出二值化圖像被覆蓋的區域與掩模像素的病機,如有一個是0,則掩模的中心覆蓋的二值化圖像像素就是0,則反之;而對於灰度圖來說是求出交集中像素的最小值作為新的像素。
 

 

erosion1(Regoin, StructElement:RegoinErosion:Iterations:)
功能:根據參考點,使用用戶自定義的結構元素對區域進行腐蝕。腐蝕的結果元素是一個區域region,可由這些算子產生:gen_circle, gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, gen_region, gen_region_polygon, gen_region_points等。
參數: Region(輸入參數):輸入區域
StructElement(輸入參數):結構元素(區域)
RegionErosion(輸出參數):腐蝕后的區域
Iterations(輸入參數):迭代資料
 
erosion2(Regoin, StructElement:RegionErosion:Row, Column, Iterations)
功能:根據參考點,使用用戶自定義的結構元素對區域進行腐蝕。腐蝕的結果元素是一個區域region。可由這些算子產生:gen_circle,gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, gen_region_polygon, gen_region_points等。
可以這么理解這個算子的功能:首先根據用戶定義的結構元素腐蝕區域,然后根據參考點和結構元素中心的相對位置,平移腐蝕后的區域。例如參考點坐標為(y=220, x=210),點和結構元素中心坐標為(y=230, x=220),腐蝕后的區域的平移量由參考點坐標減去結構元素中心坐標,即(y=220-230=-10, x=210-220=-10)。注意,參考點坐標是圖像的絕對坐標,參考點坐標=結構元素中心坐標+平移量。
參數: Region(輸入參數):輸入區域
StructElement(輸入參數):結構元素(區域)
RegionErosion(輸出參數):腐蝕后的區域 
Row(輸入參數):參數點行坐標
Column(輸入參數):參數點行坐標
Iterations(輸入參數):迭代次數。
 
erosion_circle(Region:RegionErosion:Radius:)
功能:使用圓形結構元素腐蝕區域。
參數: Region(輸入參數):輸入區域
RegoinErosion(輸出參數):腐蝕后的區域。
Radius(輸入參數):圓形結構元素的半徑。
 
erosion_rectangle1(Region:RegionErosion:Width,Height:)
功能:使用矩形結構元素腐蝕區域
參數: Region(輸入參數):輸入區域
RegionErosion(輸出參數):腐蝕后的區域
Width(輸入參數):矩形結構元素的寬度
Height(輸出參數):矩形結構元素的高度

 3、閉運算

     閉運算的功能類似於膨脹,只是增加像素相對膨脹較弱,通常會彌合較窄的間斷和細長的溝壑,消除小的孔洞,填補輪廓線中的斷裂。

     算子:

opening(Region, StructElement:RegionOpening::)
功能:使用用戶自定義的結構元素對區域進行開運算
參數: Region(輸入參數):輸入區域
StructElement(輸入參數):結構元素(區域)
RegionOpening(輸出參數):開運算后的區域
 
opening_circle(Region:RegionOPening:Radius:)
功能:使用圓形結構元素對區域進行開運算
參數: Region(輸入參數):輸入區域
RegionOpening(輸出參數):開運算后的區域
Radius(輸入參數):圓形結構元素的半徑
 
opening_rectangle1(Region:RegionOpening:Width,Height)
功能:使用矩形結構元素對區域進行開運算。
參數: Region(輸入參數):輸入區域
RegionOpening(輸出參數):開運算后的區域
Width(輸入參數):矩形結構元素的寬度
Height(輸入參數):矩形結構元素的高度
 

4.  開運算

     開運算的功能類似於腐蝕,只是減少像素相對膨脹較弱,一般會平滑物體的輪廓,斷開較窄的狹頸並消除細的突出物。

算子:

closing(Region, StructElement:RegionClosing::)
功能:使用用戶自定義的結構元素對區域進行閉運算
參數: Region(輸入參數):輸入區域
StructElement(輸入參數):用戶自定義結構元素
RegionClosing(輸出參數):閉運算的區域
 
closing_circle(Region: RegionClosing: Radius:)
功能: 使用圓形結構元素對區域進行閉運算。
參數: Region(輸入參數):輸入區域
RegionClosing(輸出參數):閉運算后的區域
Radius(輸入參數):圓形結構元素的半徑
 
closing_rectangle1(Region:RegionClosing:Width, Height:)
功能:使用矩形結構元素對區域進行閉運算
參數: Region(輸入參數):輸入區域
RegionClosing(輸出參數):閉合后的區域
Width(輸入參數):矩形結構元素的寬度
Height(輸入參數):矩形結構元素的高度

https://blog.csdn.net/armsnow/article/details/79431052 

https://blog.csdn.net/armsnow/article/details/79430660

https://blog.csdn.net/weixin_44713908/article/details/103141268

 


免責聲明!

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



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