主要内容

상에서원형객체를검출하고측정하기

이예제에서는영상에서원또는원형객체를자동으로검출하고검출된원을시각화하는방법을보여줍니다。

1단계:단계상불러오기

다양한색의둥근플라스틱칩의상을읽어들여서시합니다。이영상에는검출할원이많다는점외에도,원검출측면에서흥미로운점도몇가지있습니다。

  1. 다양한색의칩이있으며,배경과의대비도다양합니다。파란색과빨간색칩은배경과강하게대비됩니다。반면,노란색칩중일부는배경과그다지대비되지않습니다。

  2. 서로겹쳐진칩도있고,서로가까이있는칩과거의닿는칩도있습니다。객체경계선겹침과객체가림은객체검출을까다롭게만듭니다。

RGB = imread(“coloredChips.png”);imshow (rgb)

2단계:원을찾기위해반지름범위구하기

画直线함수를사용하여원의적절한반지름범위를구합니다。칩의대략적지름위에선을그립니다。

D =抽线;

선roi의길이는칩의지름입니다。일반적marketing칩의지름범위는40~50픽셀입니다。

pos = d.位置;diffPos = diff(pos);直径= hypot(diffPos(1),diffPos(2)))
直径= 45.3448

3단계:원을찾기위한첫번째시도

imfindcircles함수는반지름범위를사용하여원을검색합니다。반지름범위가20~25픽셀marketing원을검색합니다。그전에,객체를배경보다더밝게할지아니면더어둡게할지정해두는것이좋습니다。그답을찾기위해,이상의회색조버전을시하겠습니다。

Gray_image = rgb2gray(rgb);imshow (gray_image)

배경이상당히밝고,칩대부분이배경보다더어둡습니다。그러나기본적으로imfindcircles는배경보다더밝은원형객체를찾습니다。그러므로어두운원을찾기위해imfindcircles에서파라미터'ObjectPolarity'를'dark'로설정합니다。

[centers,radii] = imfindcircles(rgb,[20 25],“ObjectPolarity”“黑暗”
中心=[]半径= []

출력marketing수中心半径가비어있습니다。이는발견된원이없다는뜻입니다。이현상은자주발생합니다。imfindcircles는원검출기이고,다른검출기와마찬가지로imfindcircles는감도를확하는내부검출임계값을갖기때문입니다。간단히말하면,특정(원)검출이유효할수있으려면그검출에서검출기의신뢰가특정수준보다커야합니다。imfindcircles에는이내부임계값을조정(결과적으로,알고리즘의감도조)정하는데사용할수있는파라미터‘敏感’가있습니다。“敏感性”값을높이면검출임계값이더낮게설정되어더많은원을검출하게됩니다。이는주택보시스템에사용되는동작감지기의감도조정과비슷합니다。

4단계:검출감도늘리기

다시칩영상으로돌아와보면,디폴트감도수준에서모든원이내부임계값보다낮을수있습니다。원이검출되지않은이유가바로이때문입니다。기본적으로“灵敏度”(0 1과사이의숫자)0.85로는설정되어있습니다。“敏感”를0.9로늘립니다。

[centers,radii] = imfindcircles(rgb,[20 25],“ObjectPolarity”“黑暗”...“敏感”, 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 297.0077 243.9893 166.4538 271.5873 280.8920
半径=8×123.1604 22.5710 22.9576 23.7356 22.9551 22.9995 22.9055 23.0298

이번에는imfindcircles가원을몇개(정확하게는8개)찾았습니다。中心에는원의중심의위치가들어있고,半径에는그원의추정반지름이들어있습니다。

5단계:@mail.huawei.com

함수viscircles를사용하여상에원을그릴수있습니다。imfindcircles의출력변수中心半径viscircles에바로전달할수있습니다。

Imshow (rgb) h = viscircles(中心,半径);

원의중심의위치가정확한것같고,해당반지름도실제칩에잘맞는것같습니다。그러나아직도상당히많은칩이누락되었습니다。‘灵敏度’를0.92로더늘려봅니다。

[centers,radii] = imfindcircles(rgb,[20 25],“ObjectPolarity”“黑暗”...“敏感”, 0.92);长度(中心)
Ans = 16

“敏感”를늘려훨씬더많은원을찾을수있습니다。이원들을다시상에플로팅합니다。

删除(h)删除先前绘制的圆H = viscircles(中心,半径);

6 .단계:원을찾기위해두번째방법(2 .단계)사용하기

이결과가더좋아보입니다。imfindcircles에는원을찾을수있는방법이두가지있습니다。지금까지는원을검출하는데위상 코딩(阶段编码)이라는디폴트방법을사용했습니다。imfindcircles에서는2단계(两阶段)방법이라고하는또다른방법도사용할수있습니다。2단계방법을사용하여결과를@ @시합니다。

[centers,radii] = imfindcircles(rgb,[20 25],“ObjectPolarity”“黑暗”...“敏感”, 0.92,“方法”“二级”);删除(h) h = viscircles(中心,半径);

2단계방법은灵敏度가0.92일때더많은원을검출했습니다。대체로이두방법은장점이서로다르기때문에상호보완적입니다。위상코딩방법은일반적으로2단계방법보다속도가빠르고잡음에조금더강합니다。그러나2단계방법의검출개수와동일하려면“灵敏度”수준을더올려야할수도있습니다。예를들어,“灵敏度”수준을더올리면즉,0.95로올리면,위상코딩방법도같은개수의칩을찾게됩니다。

[centers,radii] = imfindcircles(rgb,[20 25],“ObjectPolarity”“黑暗”...“敏感”, 0.95);删除(h) viscircles(中心、半径);

imfindcircles의두방법은일부만보이는(가린)칩의중심과반지름을정확하게찾습니다。

7단계:왜아직도일부원이누락되는걸까?

마지막결과를보면,의아스럽게도imfindcircles는상의노란색칩을찾지못합니다。노란색칩은배경과강한대비를이루지않습니다。실제로노란색칩은배경과명암이상당히유사한것같습니다。가정한대로,노란색칩이배경보다실제로'더어두울'가능성은없을까三元?확하기위해,이상의회색조버전을다시시합니다。

imshow (gray_image)

8단계:상에서‘밝은’원찾기

노란색칩은배경과비교하여명암이거의같거나,조금더밝을수있습니다。따라서노란색칩을검출하기위해”ObjectPolarity를“明亮”로변경합니다。

[centersBright,radiiBright] = imfindcircles(rgb,[20 25],...“ObjectPolarity”“光明”“敏感”, 0.92);

9단계:서로다른색으로‘밝은’원그리기

viscircles에서“颜色”파라미터를변경하여,서로다른색으로밝은원을그립니다。

imshow(rgb) hBright = viscircles(centersBright, radiiBright,“颜色”“b”);

누락된노란색칩중세개는찾았지만,한개는여전히찾지못하고있습니다。그칩은이배경에서다른칩과함께두드러지지않기때문에찾기힘듭니다。

10단계:'EdgeThreshold'값낮추기

imfindcircles에는'EdgeThreshold'라는또다른파라미터가있습니다。여기서유용할수있는파라미터입니다。imfindcircles는원을찾을때상의경계픽셀만사용합니다。이러한경계픽셀은기본적으로기울기값이큰픽셀입니다。픽셀을경계픽셀로간주하여계산에넣기전에,‘EdgeThreshold파라미터를사용하여해당픽셀의기울기값을얼마나높일지조정할수있습니다。이파라미터에높은값(1에근접)을사용하면강한경계(기울기값이더높음)만포함할수있는반면,낮은값(0에근접)은좀더관대하여약한경계(기울기값이더낮음)도계산에포함합니다。누락된노란색칩의경우,대비가낮아(칩의원주에서)경계선픽셀중일부의기울기값이낮을것입니다。따라서노란색칩의경계픽셀대부분을계산에넣으려면”EdgeThreshold파라미터를낮추어야합니다。

[centersBright,radiiBright,metricBright] = imfindcircles(rgb,[20 25],...“ObjectPolarity”“光明”“敏感”, 0.92,“EdgeThreshold”, 0.1);delete(hBright) hBright = viscircles(centersBright, radiiBright,“颜色”“b”);

11단계:'어두운'원과'밝은'원을함께그리기

이제imfindcircles는모든노란색칩과녹색칩도찾았습니다。이러한칩은파란색으로그리고,이전에찾은다른칩(‘ObjectPolarity’가'黑暗'로설정됨)은빨간색으로함께그립니다。

H = viscircles(中心,半径);

모든원을검출했습니다。마지막으로한가지유의할점을덧붙이자면,검출시파라미터를좀더공격적으로변경하면원을더많이찾을지모르지만,원을잘못찾을가능성도늘어납니다。정확하게찾을수있는원(검출률)이있으면,그와함께잘못찾는원(오검출률)도있는법입니다。

즐겁게원을찾으시길바랍니다!

참고 항목

|

관련 항목