ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์—์ง€ ๊ฒ€์ถœ(2) - Canny edge detection
    AI\ML\DL/Computer Vision 2023. 8. 8. 19:15
    ๋ฐ˜์‘ํ˜•

    โœฃ

    Background

    ์บ๋‹ˆ ์—์ง€ ๊ฐ์ง€๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์—์ง€ ๊ฒ€์ถœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. John F. Canny๊ฐ€ 2010๋…„๋„์— ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ OpenCV ์—์„œ ์บ๋‹ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•œ cv.Canny() ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

     

    Canny edge๋Š” ๊ทธ๋ž˜๋””์–ธํŠธ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•˜๊ณ  ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•ด์ค˜์„œ ์—์ง€๋ฅผ ๊ฒ€์ถœํ•˜๋ฉด ์œค๊ณฝ์„ ์ด ๋„ˆ๋ฌด ๋‘๊ป๊ฒŒ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์—,

    ์ด๋ ‡๊ฒŒ ์žก์Œ์ด ๋งŽ์€ ์ƒํƒœ์—์„œ์„œ ํ•œ ์ ์„ ๊ฒฐ์ •ํ•˜์—ฌ ์—์ง€์˜ ๊ตต๊ธฐ(๋‘๊ป˜)๋ฅผ ์–‡๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉ๋œ ๋ฐฉ๋ฒ•์ด๋‹ค. 

    ์ข‹์€ ์—์ง€ ๊ฒ€์ถœ๊ธฐ์˜ ์กฐ๊ฑด์€ โถ ํ•˜๋‚˜์˜ ์—์ง€๋ฅผ ํ•˜๋‚˜์˜ ์ (ํ•œ ๋‘๊ป˜)์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

    ๋˜ํ•œ โท ํ”ฝ์…€์ด ์กฐ๋ช…์— ์˜ํ•ด ๋ฏธ์„ธํ•œ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋˜์–ด ์—์ง€๊ฐ€ ์•„๋‹Œ ์ ์„ ์—์ง€๋กœ ์ฐพ๊ฑฐ๋‚˜(false positive) ๋˜๋Š” ์—์ง€์ธ๋ฐ ์—์ง€๋กœ ๊ฒ€์ถœํ•˜๊ธฐ ๋ชปํ•˜๋Š”(true false) ์˜ค๋ฅ˜์œจ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•œ๋‹ค. 

    โ€‹

    โœ›

    Non-Maximum Suppresion

    ์บ๋‹ˆ ์—์ง€๋Š” ํ•œ ๋‘๊ป˜ ์—์ง€๋ฅผ ์ถœ๋ ฅ์„œ ๋น„์ตœ๋Œ€ ์–ต์ œ(NMS: Non-Maximum Suppression)๋ฅผ ์ ์šฉํ•œ๋‹ค. 

    ๋น„์ตœ๋Œ€ ์–ต์ œ๋Š” ์—์ง€ ๊ฒ€์ถœ ํ›„์— ์—‘์ง€์˜ ๊ตต๊ธฐ๋ฅผ ์–‡๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐ ํ”ฝ์…€์˜ ๊ทธ๋ž˜๋””์–ธํŠธ ๋ฐฉํ–ฅ์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ์—ฃ์ง€๊ฐ€ local maximum ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. 

    ์ž๊ธฐ ์ž์‹ ์˜ ์—์ง€ ๊ฐ•๋„๊ฐ€ (์—์ง€ ๋ฐฉํ–ฅ์—) ์ˆ˜์ง์ธ ๋‘ ์ด์›ƒ ํ™”์†Œ์˜ ์—์ง€ ๊ฐ•๋„(magnitude)๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์—์ง€๋กœ ์œ ์ง€๋˜๊ณ ,

    ์ž์‹ ์˜ ๊ฐ’์ด ๋” ์ž‘๋‹ค๋ฉด ์—์ง€ ์•„๋‹Œ ํ™”์†Œ๋กœ ๋ฐ”๋€๋‹ค. ๋‹ค์‹œ ๋งํ•ด ๋‘ ์ด์›ƒ ํ™”์†Œ์™€ ๋น„๊ตํ•ด ์ž์‹ ์ด ์ตœ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฉด ์–ต์ œ๋œ๋‹ค. 

     

    ๋น„์ตœ๋Œ€ ์–ต์ œ. ๊ฐ ์—์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ์ˆ˜์ง์ธ ๋‘ ์ด์›ƒ ํ™”์†Œ์™€ ๋น„๊ตํ•ด ์ž์‹ ์ด ์ตœ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฉด ์–ต์ œ๋œ๋‹ค.

    โœ›

    ์˜ˆ์‹œ 1) edge strength๊ฐ€ ๊ฐ ํ™”์†Œ์— ์ˆซ์ž๋กœ ์“ฐ์—ฌ์žˆ๋‹ค. ๊ทธ๋ž˜๋””์–ธํŠธ ๋ฐฉํ–ฅ์€ ํ™”์‚ดํ‘œ๋กœ ๋‚˜ํƒ€๋‚˜์žˆ์œผ๋ฉฐ ๊ฐ ๋ฐฉํ–ฅ์— ์ˆ˜์ง์ธ ์ด์›ƒํ™”์†Œ์™€ edge strength๋ฅผ ๋น„๊ตํ•œ๋‹ค. NMS๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ํฐ์ƒ‰ ๊ฒฝ๊ณ„์„ ์œผ๋กœ ๋ฌถ์—ฌ์ ธ ์žˆ๋‹ค.
    ์˜ˆ์‹œ 2) Canny Edge Detection Algorithm Application for Analysis of the Potential Field Map (2017)

     

    ์บ๋‹ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ FN์„ ์ค„์ด๊ธฐ ์œ„ํ•ด 2๊ฐœ์˜ ์ด๋ ฅ ์ž„๊ณ„๊ฐ’ $T_{low}$, $T_{high}$ ๋ฅผ ์ด์šฉํ•œ ์—์ง€ ์ถ”์ ์„ ์ถ”๊ฐ€๋กœ ์ ์šฉํ•œ๋‹ค. 

    ์—์ง€ ์ถ”์ ์€ ์—์ง€ ๊ฐ•๋„๊ฐ€ $T_{high}$ ์ด์ƒ์ธ ์—์ง€ ํ™”์†Œ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ์‹ค์ œ ์—์ง€์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ณณ์—์„œ ์ถ”์ ์„ ์‹œ์ž‘ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋„์ด๋‹ค. 

    ์‹œ์ž‘ ํ™”์†Œ๊ฐ€ ์ •ํ•ด์ง€๋ฉด ์ดํ›„ ์ถ”์ ์€ $T_{low}$ ์ž„๊ณ„๊ฐ’์„ ๋„˜๋Š” ์—์ง€๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. ์ฆ‰ ์ถ”์  ์ด๋ ฅ์ด ์žˆ๋Š” ์ด์›ƒ์„ ๊ฐ€์ง„ ํ™”์†Œ๋Š” ์—์ง€ ๊ฐ•๋„๊ฐ€ ๋‚ฎ๋”๋ผ๋„ ์‹ค์ œ ์—์ง€๋กœ ์ธ์ •ํ•˜๋Š” ์ „๋žต์ด๋‹ค. ์บ๋‹ˆ๋Š” $T_{high}$๋ฅผ $T_{low}$ ์˜ 2~3๋ฐฐ๋กœ ์„ค์ •ํ•  ๊ฒƒ์„ ๊ถŒ๊ณ ํ–ˆ๋‹ค. 

     

    ์บ๋‹ˆ ์—์ง€ ์‹คํ—˜ํ•˜๊ธฐ

     

    import cv2 as cv
    
    img = cv.imread('soccer.jpg')
    
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    
    canny1 = cv.Canny(gray, 50, 100)
    canny2 = cv.Canny(gray, 100, 200)
    
    cv.imshow('Original', gray)
    cv.imshow('Canny1', canny1)
    cv.imshow('Canny2', canny2)
    
    cv.waitKey()
    cv.destroyAllWindows()

    (Original) gray image
    Canny1 (์ด๋ ฅ ์ž„๊ณ„๊ฐ’์„ ๋” ๋‚ฎ๊ฒŒ ์„ค์ •ํ•œ ๊ฒฝ์šฐ): ์žก์Œ ์—์ง€๊ฐ€ ๋งŽ๋‹ค
    Canny 3 (์ด๋ ฅ ์ž„๊ณ„๊ฐ’์ด ๋†’์„ ๋•Œ): ์—์ง€ ๊ฐ•๋„๊ฐ€ ํฐ ํ™”์†Œ๋งŒ ์ถ”์ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ ์€ ์—์ง€๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์™ผ์ชฝ ๋’ท์ชฝ์— ์žˆ๋Š” ์„ ์ˆ˜์˜ ํ•˜์˜ ๋ถ€๋ถ„์˜ ํš์˜ ์ผ๋ถ€๊ฐ€ ์†์‹ค๋˜์—ˆ๋‹ค.

     

     

     

    ์ถœ์ฒ˜

    ์˜ค์ผ์„, ใ€Ž์ปดํ“จํ„ฐ ๋น„์ „๊ณผ ๋”ฅ๋Ÿฌ๋‹ใ€ (ํ•œ๋น› ์•„์นด๋ฐ๋ฏธ, 2013)

Designed by Tistory.