Halcon 学习笔记--形态学(5)
一、二值化與灰度圖像
1、 二值化圖像只有兩個(gè)元素之分0和1—非黑即白
算子:
binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
參數(shù):
Image:需要進(jìn)行閾值的圖像
Region:處理后的區(qū)域
Method:分割方法('max_separability':最大限度的可分性, 'smooth_histo':直方圖平滑)
LightDark:提取的是黑色部分還是白色部分
UsedThreshold:自動(dòng)閾值使用的閾值值
描述:
binary_threshold通過一個(gè)自動(dòng)確定的全局閾值并返回區(qū)域中的分段區(qū)域來分割單通道圖像。例如:在同質(zhì)照明的背景下對(duì)字符的分割很有用。binary_threshold還會(huì)返回UsedThreshold中使用的閾值。
所使用的閾值是由方法中給出的方法決定的。目前,操作符提供了以下兩種方法:“max_separability”和“smooth_histo”。這兩種方法都只能用于具有雙峰直方圖的圖像。
方法“smooth _histo”提供了由操作員bin_threshold提供的相同功能。方法“max_separability”傾向于為UsedThreshold確定較小的值。此外,它對(duì)柱狀圖中的稀疏孤立峰不太敏感,而且往往比“平滑”要快得多。
最大限度的可分性(max_separability):
通過選擇Method= ' max_separability ',根據(jù)“灰度直方圖的閾值選擇方法”的灰度直方圖自動(dòng)閾值調(diào)用。該算法首先計(jì)算圖像的直方圖,然后利用統(tǒng)計(jì)矩找到將像素分割為前景和背景的最優(yōu)閾值,并最大化這兩個(gè)類之間的可分性。此方法僅適用于byte和uint2圖像。
直方圖平滑(smooth_histo):
通過選擇Method = 'smooth_histo ' binary_threshold可以通過以下方式確定閾值:首先確定灰度值的相對(duì)直方圖。然后,從直方圖提取相關(guān)的最小值,作為閾值操作的參數(shù)。為了減少最小值,直方圖被平滑處理為一個(gè)高斯函數(shù),就像在auto_threshold中一樣。在平滑直方圖中,掩模尺寸增大,直到最小值。然后,閾值設(shè)置為這個(gè)最小值的位置。
看效果:
當(dāng)LightDark=light,max_separability選的區(qū)域比smooth_histo少一點(diǎn)
當(dāng)LightDark=dark,max_separability選的區(qū)域比smooth_histo多一點(diǎn)
另:
bin_threshold:二值化閾值,自動(dòng)地全局閾值方法,使用Threshold找到兩個(gè)波峰之間的最小值,分割出來的是非黑即白。
二值化的方法:(參考:http://blog.csdn.net/jia20003/article/details/8074627)
方法一:掃描圖像的每個(gè)像素值,值小于127的將像素值設(shè)為0(黑色),值大于等于127的像素值設(shè)為255(白色)。該方法的好處是計(jì)算量少速度快。
方法二:計(jì)算像素的平均值K,掃描圖像的每個(gè)像素值如像素值大于K像素值設(shè)為255(白色),值小于等于K像素值設(shè)為0(黑色)。
方法三:使用直方圖方法來尋找二值化閾值,直方圖是圖像的重要特質(zhì),直方圖方法選擇二值化閾值主要是發(fā)現(xiàn)圖像的兩個(gè)最高的峰,然后在閾值取值在兩個(gè)峰之間的峰谷最低處。
2、灰度圖也是黑白圖像,由黑到白是一個(gè)漸變過程。
算子
rgb1_to_gray
二、形態(tài)學(xué)
腐蝕和膨脹是對(duì)白色部分(高亮部分)而言的,不是黑色部分。膨脹就是圖像中的高亮部分進(jìn)行膨脹,“領(lǐng)域擴(kuò)張”,效果圖擁有比原圖更大的高亮區(qū)域。腐蝕就是原圖中的高亮部分被腐蝕,“領(lǐng)域被蠶食”,效果圖擁有比原圖更小的高亮區(qū)域。
1、膨脹
增加圖像白色像素的個(gè)數(shù),及白色區(qū)域變多。對(duì)于二值化圖像,就是求出二值化圖像被覆蓋的區(qū)域與掩模像素的交集,如有是1,則掩模的中心覆蓋的二值化圖像像素就是1,則反之;而對(duì)于灰度圖來說是求出交集中像素的最大值作為新的像素。
算子:
dilation1(Region, StructElement:RegionDilation:Iterations:)
功能:使用用戶自定義的結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行膨脹。結(jié)果元素是一個(gè)區(qū)域region,可由這些算子區(qū)域產(chǎn)生:gen_circle, gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, draw_region_polygon, gen_region_points等。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
StructElement(輸入?yún)?shù)):結(jié)構(gòu)元素(區(qū)域)
RegionDilation(輸出參數(shù)):膨脹后的區(qū)域
Iterations(輸入?yún)?shù)):迭代次數(shù)
dilation2(Region, StructElement:RegionDilation:Row, Column, Iterations)
功能:根據(jù)參考點(diǎn),使用用戶自定義的結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行膨脹。具體用法參見erosion2.
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
StructElement(輸入?yún)?shù)):結(jié)構(gòu)元素
RegionDilation(輸出參數(shù)):膨脹后的區(qū)域
Row(輸入?yún)?shù)):參考點(diǎn)行坐標(biāo)
Column(輸入?yún)?shù)):參考點(diǎn)列坐標(biāo)
Iterations(輸入?yún)?shù)):迭代次數(shù)
dilation_circle(Region:RegionDilation:Radius:)
功能:使用圓形結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行膨脹。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionDilation(輸出參數(shù)):膨脹后的區(qū)域
Radius(輸入?yún)?shù)):圓形結(jié)構(gòu)元素的半徑
dilation_rectangle1(Region:RegionDilation:Width, Height:)
功能:使用矩形結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行膨脹
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionDilation(輸出參數(shù)):膨脹后的區(qū)域
Width(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的寬度
Height(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的高度
2、腐蝕
減少圖像白色像素的個(gè)數(shù),及白色區(qū)域減少。對(duì)于二值化圖像,就是求出二值化圖像被覆蓋的區(qū)域與掩模像素的病機(jī),如有一個(gè)是0,則掩模的中心覆蓋的二值化圖像像素就是0,則反之;而對(duì)于灰度圖來說是求出交集中像素的最小值作為新的像素。
erosion1(Regoin, StructElement:RegoinErosion:Iterations:)
功能:根據(jù)參考點(diǎn),使用用戶自定義的結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行腐蝕。腐蝕的結(jié)果元素是一個(gè)區(qū)域region,可由這些算子產(chǎn)生:gen_circle, gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, gen_region, gen_region_polygon, gen_region_points等。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
StructElement(輸入?yún)?shù)):結(jié)構(gòu)元素(區(qū)域)
RegionErosion(輸出參數(shù)):腐蝕后的區(qū)域
Iterations(輸入?yún)?shù)):迭代資料
erosion2(Regoin, StructElement:RegionErosion:Row, Column, Iterations)
功能:根據(jù)參考點(diǎn),使用用戶自定義的結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行腐蝕。腐蝕的結(jié)果元素是一個(gè)區(qū)域region。可由這些算子產(chǎn)生:gen_circle,gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, gen_region_polygon, gen_region_points等。
可以這么理解這個(gè)算子的功能:首先根據(jù)用戶定義的結(jié)構(gòu)元素腐蝕區(qū)域,然后根據(jù)參考點(diǎn)和結(jié)構(gòu)元素中心的相對(duì)位置,平移腐蝕后的區(qū)域。例如參考點(diǎn)坐標(biāo)為(y=220, x=210),點(diǎn)和結(jié)構(gòu)元素中心坐標(biāo)為(y=230, x=220),腐蝕后的區(qū)域的平移量由參考點(diǎn)坐標(biāo)減去結(jié)構(gòu)元素中心坐標(biāo),即(y=220-230=-10, x=210-220=-10)。注意,參考點(diǎn)坐標(biāo)是圖像的絕對(duì)坐標(biāo),參考點(diǎn)坐標(biāo)=結(jié)構(gòu)元素中心坐標(biāo)+平移量。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
StructElement(輸入?yún)?shù)):結(jié)構(gòu)元素(區(qū)域)
RegionErosion(輸出參數(shù)):腐蝕后的區(qū)域
Row(輸入?yún)?shù)):參數(shù)點(diǎn)行坐標(biāo)
Column(輸入?yún)?shù)):參數(shù)點(diǎn)行坐標(biāo)
Iterations(輸入?yún)?shù)):迭代次數(shù)。
erosion_circle(Region:RegionErosion:Radius:)
功能:使用圓形結(jié)構(gòu)元素腐蝕區(qū)域。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegoinErosion(輸出參數(shù)):腐蝕后的區(qū)域。
Radius(輸入?yún)?shù)):圓形結(jié)構(gòu)元素的半徑。
erosion_rectangle1(Region:RegionErosion:Width,Height:)
功能:使用矩形結(jié)構(gòu)元素腐蝕區(qū)域
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionErosion(輸出參數(shù)):腐蝕后的區(qū)域
Width(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的寬度
Height(輸出參數(shù)):矩形結(jié)構(gòu)元素的高度
3、閉運(yùn)算
閉運(yùn)算的功能類似于膨脹,只是增加像素相對(duì)膨脹較弱,通常會(huì)彌合較窄的間斷和細(xì)長(zhǎng)的溝壑,消除小的孔洞,填補(bǔ)輪廓線中的斷裂。
算子:
opening(Region, StructElement:RegionOpening::)
功能:使用用戶自定義的結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行開運(yùn)算
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
StructElement(輸入?yún)?shù)):結(jié)構(gòu)元素(區(qū)域)
RegionOpening(輸出參數(shù)):開運(yùn)算后的區(qū)域
opening_circle(Region:RegionOPening:Radius:)
功能:使用圓形結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行開運(yùn)算
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionOpening(輸出參數(shù)):開運(yùn)算后的區(qū)域
Radius(輸入?yún)?shù)):圓形結(jié)構(gòu)元素的半徑
opening_rectangle1(Region:RegionOpening:Width,Height)
功能:使用矩形結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行開運(yùn)算。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionOpening(輸出參數(shù)):開運(yùn)算后的區(qū)域
Width(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的寬度
Height(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的高度
4. 開運(yùn)算
開運(yùn)算的功能類似于腐蝕,只是減少像素相對(duì)膨脹較弱,一般會(huì)平滑物體的輪廓,斷開較窄的狹頸并消除細(xì)的突出物。
算子:
closing(Region, StructElement:RegionClosing::)
功能:使用用戶自定義的結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行閉運(yùn)算
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
StructElement(輸入?yún)?shù)):用戶自定義結(jié)構(gòu)元素
RegionClosing(輸出參數(shù)):閉運(yùn)算的區(qū)域
closing_circle(Region: RegionClosing: Radius:)
功能:使用圓形結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行閉運(yùn)算。
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionClosing(輸出參數(shù)):閉運(yùn)算后的區(qū)域
Radius(輸入?yún)?shù)):圓形結(jié)構(gòu)元素的半徑
closing_rectangle1(Region:RegionClosing:Width, Height:)
功能:使用矩形結(jié)構(gòu)元素對(duì)區(qū)域進(jìn)行閉運(yùn)算
參數(shù):Region(輸入?yún)?shù)):輸入?yún)^(qū)域
RegionClosing(輸出參數(shù)):閉合后的區(qū)域
Width(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的寬度
Height(輸入?yún)?shù)):矩形結(jié)構(gòu)元素的高度
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
總結(jié)
以上是生活随笔為你收集整理的Halcon 学习笔记--形态学(5)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唯品会app如何解绑银行卡
- 下一篇: 中国银行如何开通短信通知(《中国》第一季