主要内容

イメージ内円形オブジェクトの测定测定

この例,内の円または自动的に検出し,検出検出されたた円を可视可视化化化する

手顺1:イメージの読み込み

さまざま色円形チップのを読み取って表示します対象対象ととなるなるたくさんたくさんたくさんのの円があるあるだけでなくだけでなく,,円円をを検出検出するするとといういういういう観点でイメージををををます。

  1. な色が,,は背景とコントラストコントラストもいいますます。。青青青とと赤赤チップチップははこのこの背景背景とののコントラストコントラストががががはっきりはっきりはっきりはっきりいいますますますますますあいまいです。

  2. のチップになっているいるあれば,触れそうなそうなくらいくらいにに近い近いものもありあります。。オブジェクトの境界の重重重重

rgb = imread('coloredchips.png');IMShow(RGB)

手顺2:円をするため半径のの判别判别

关数绘制线を使用,のな半径范囲検索ます。。チップのおおよその直径の上上にに线を描画描画

d = drawline;

ROIののさチップの直径です。通常のチップチップ直径直径ははははははははははははははははははははははははははははははは

pos = d.处;diffpos = diff(pos);直径= hypot(diffpos(1),diffpos(2))
直径= 45.3448

手顺3:円を検出最初试行试行

关数imfindcircles25 ~25 ~25 ~25ピクセルピクセル持つ持つ持つ円を范囲范囲范囲のの半径半径をを持つ持つ円をを検索ししますます。前前にに,,比较ます。确认ために,こののバージョンを见てましょう。

gray_image = rgb2gray(rgb);imshow(gray_image)

背景かなり,のチップ背景よりことがます。しかし,既定既定,,,imfindcirclesは背景も円形を検出し。このため,imfindcirclesでパラメーター'objectpallity'を'dark'ににし,暗いを探索ます。。。

[中心,半径] = imfindcircles(rgb,[20 25],,“对象光性”,,,,'黑暗的'
中心= [] radii = []

出力中心半径が空てますが,これこれが検出れなかっなかったことことをを表し表し表しててますます。このこのようようようななな结果结果にimfindcirclesが円の“検出器”であり,の器と同じよう,,imfindcirclesにはを决定するのの“検出し値”があるですつまり,器の特定の(円の)検出“有效”であるとは,そのに対する度が一定レベルを超え超えていいなければばなり。imfindcircles敏感性'sentivity'がありこれ使用てて,,この値とと,,结果的的的ににに得得らられるれるれるれるアルゴリズムアルゴリズムアルゴリズムのののの感度感度感度をを制御制御制御できできできできできできできますますますますますますます検出さがなりますこれ,セキュリティで使用使用されるモーション検出器検出器でのの感度制御とと似似

手顺4:検出感度を上げる

のにます既定の感度感度レベルはのの円円内部内部しきいしきいしきい値値値よりよりよりより低くそのそのためためにににに円円円円円円ががががが検出検出さささされれれれなかっなかっなかっなかったたたたたたた可能ありががががががありがががありありががありがありありがががありがありがががsensitivity'ををれれれをををを0.9ににます。。

[中心,半径] = imfindcircles(rgb,[20 25],,“对象光性”,,,,'黑暗的',,,,...'灵敏度',0.9)
中心=8×2146.1895 198.5824 328.8132 135.5883 130.3134 43.8039 175.2698 297.0583 312.2831 192.3709 327.1316
半径=8×123.1604 22.5710 22.9576 23.7356 22.9551 22.9995 22.9055 23.0298

今回は,imfindcirclesが円いくつ検出したた。には,,,,,,。。。。。中心には中心のが格纳さて,,,半径にはの推定半径が格纳れています。

手顺5:イメージイメージで円の描画

关数viscirclesを使用,イメージに円をでき。。。imfindcirclesからの出力変数中心半径は,viscirclesに直接ことが可能。。

Imshow(RGB)H = Viscircles(中心,半径);

の中心配置さてて,対応する半径も実际のチップチップととうまくうまくうまく一致一致一致ししてようです。。。しかししかししかししかし,,,,まだまだまだ検出検出検出ささされれれれてててないないチップチップチップチップチップチップチップかなりかなりかなりかなりかなり。

[中心,半径] = imfindcircles(rgb,[20 25],,“对象光性”,,,,'黑暗的',,,,...'灵敏度',0.92);长度(中心)
ANS = 16

'敏感性'をたら円数ましたこれらの円をイメージ上にもう一プロットプロットしし。。

删除(h)%删除以前绘制的圆圈H = Viscircles(中心,半径);

手顺6:円のにににつ目つ目方法(2段阶)を

この方法方,よいになります。imfindcirclesには検出するの方法方法ががつあり。ここまでは,円を検出するためにに“位相”メソッドとのメソッド使用してまし。。。imfindcirclesには,に“ 2段阶”1つのいるもうもうもうつのつのありますます。段阶段阶をを使用してて结果を。。。

[中心,半径] = imfindcircles(rgb,[20 25],,“对象光性”,,,,'黑暗的',,,,...'灵敏度',0.92,'方法',,,,“ Twostage”);删除(H)H = Viscircles(中心,RADII);

0.92敏感性ででで段阶段阶ほうほうの円をてていいますます。。を述べるとと,これらののののつのつのつのつのメソッドはは异なる异なるもっもっいいいいててててててメソッドも,に対するロバスト性わずかに优れ优れててしかし,,,,,,,,,段阶段阶段阶段阶段阶段阶段阶メソッドメソッドメソッドと同じ同じ数数をを検出,,,,,,,,'sensititive'sensitivity'sensitivity''敏感性'レベル0.95ににと同じ数チップ検出されます。。

[中心,半径] = imfindcircles(rgb,[20 25],,“对象光性”,,,,'黑暗的',,,,...'灵敏度',0.95);删除(H)Viscircles(中心,半径);

imfindcirclesの両方が一部だけ见え(隠れいる)チップチップチップ中心と半径を正确ににするすることことにに

手顺7:まだ検出れない円が理由

最后のをてみる,面白いことに,imfindcirclesはイメージのチップを検出してません。。チップはは,,背景背景背景とののがが强く强くありありありませませんん。それどころかかかとかなりなりなりなりなり近い近い近い近い近いより“暗く”ないいうことでしょかこれ确认するために,このイメージののグレースケールバージョンバージョンを一度一度表示表示

imshow(gray_image)

手顺8:イメージ内の“明るい”円円検出

黄色チップ背景と比较するとほとんど同じ同じ强度强度です。。より明るい。。。そこそこそこそこででででででででででで,,,,,,,,,黄色黄色黄色黄色黄色のののののののチップチップチップチップチップチップチップチップチップををををををを検出,,,,,,,,,'

[Centersbright,Radiibright] = Imfindcircles(RGB,[20 25],,...“对象光性”,,,,'明亮的',,,,'灵敏度',0.92);

手顺9:异なる色の“明るい”円円描画描画

viscircles'''颜色'パラメーターを変更て,异なる色ででで円を描画ます。

Imshow(RGB)'颜色',,,,'b');

33つチップチップチップががががががつされれがががが,,黄色黄色黄色ののののののチップチップチップチップチップチップチップチップつつつつつつつつつ抜け抜け落ちてていいいますます。。。これらこれらこれらこれらのののののはははははははははははははははいない,検出が。。

手顺10:'edgethreshold'の値下げる下げる

imfindcircles''edgethreshold'とと别パラメーター,ここ役に立ちます。。ををににににimfindcirclesは内エッジのみをします。これらののピクセル,基本基本基本的的的ににににににはははは高い高い勾配勾配勾配値値値をををもつもつもつピクセルピクセルピクセルピクセルピクセルですです。。。。。。。。は,ピクセルの勾配値が程度程度“高く”なければならかますます。この(1に近い)値値をを指定指定するととととと,,强い强い强いエッジ(高い高い)がエッジ(低い勾配)ももも组み込まれます検出さされれないない黄色のチップのの场合はは,コントラストコントラストがが低い低いためため,,,チップ外周ののピクセルピクセルピクセル'edgethreshold'edgethreshold'パラメーターパラメーター下げて黄色のチップのほとんどのエッジピクセルが计算にに组み込ま组み込まれるれる。

[Centersbright,Radiibright,公制] = Imfindcircles(RGB,[20 25],,...“对象光性”,,,,'明亮的',,,,'灵敏度',0.92,'edgethreshold',0.1);删除(hbright)'颜色',,,,'b');

手顺11:“暗い”円と“明るい”円円同时描画描画

これで,imfindcircles1つのチップとととつのつのつの绿のチップを検出検出ししまし。これらこれらこれらのののチップチップチップチップ,,,,,,'obsectpallity'obsectpallity'dark'dark'dark'dark'にしにし先にに検出検出ししていいい

H = Viscircles(中心,半径);

の円さています。。に,注意注意な点点がががありありますます。をを検出検出率率がが高くなるようなな値値値値するする,,,,,,,検出検出検出検出性もます正しく検出できる円(検出)ととととて検出検出されるれるれる数(误认率)の(误认率)の

円探しお楽しみください!

参考

|

关连するトピック