ํ”ฝ์…€ ์ฒ˜๋ฆฌ๋Š” ๋‹จ์ผ ํ”ฝ์…€ ์ฒ˜๋ฆฌ์™€ ํ”ฝ์…€ ๊ทธ๋ฃน ์ฒ˜๋ฆฌ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  ์˜๋ฏธ ์ข…๋ฅ˜
๋‹จ์ผ ํ”ฝ์…€ ์ฒ˜๋ฆฌ ์ด์›ƒ ํ”ฝ์…€๊ณผ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ž…๋ ฅ ์˜์ƒ์˜ ๊ฐ ํ”ฝ์…€ ๊ฐ’์„ ๋ณ€ํ™˜ํ•œ ํ›„ ๊ฒฐ๊ณผ ์˜์ƒ์˜ ๋™์ผํ•œ ์œ„์น˜์— ์ถœ๋ ฅํ•˜๋Š” ์—ฐ์‚ฐ ์‚ฐ์ˆ ์—ฐ์‚ฐ, ๋…ผ๋ฆฌ์—ฐ์‚ฐ, ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ, ๊ณ ์ • ์ž„๊ณ„๊ฐ’์œผ๋กœ ์ด์ง„ํ™”
ํ”ฝ์…€ ๊ทธ๋ฃน ์ฒ˜๋ฆฌ ์ถœ๋ ฅ ์˜์ƒ์˜ ์ƒˆ๋กœ์šด ํ”ฝ์…€ ๊ฐ’์„ ๊ฒฐ์ • ํ•  ๋•Œ ๊ทธ ์ฃผ์œ„์˜ ์ด์›ƒ ํ”ฝ์…€๋“ค๋„ ํ•จ๊ป˜ ๊ณ ๋ คํ•˜๋Š” ๊ณต๊ฐ„ ์˜์—ญ ์—ฐ์‚ฐ, ์ปจ๋ณผ๋ฃจ์…˜ ์—ฐ์‚ฐ์œผ๋กœ ์ฒ˜๋ฆฌ ๋ธ”๋Ÿฌ๋ง & ์ƒคํ”„๋‹, ๊ฐ€๋ณ€ ์ž„๊ณ„๊ฐ’์œผ๋กœ ์ง€์—ญ ์ด์ง„ํ™”

 

๐Ÿ‘€ ์ปจ๋ณผ๋ฃจ์…˜ ์—ฐ์‚ฐ (Convolution, ํ•ฉ์„ฑ๊ณฑ)

์ฒ˜๋ฆฌํ•˜๊ณ  ํ•˜๋Š” ํ”ฝ์…€ ๊ฐ’์„ ์ด์›ƒ ํ”ฝ์…€๊ณผ ๊ฐ๊ฐ์— ๋Œ€์‘ํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ€์ค‘์น˜(ํ•„ํ„ฐ์˜ ๊ฐ’)๋ฅผ ๊ณฑํ•˜์—ฌ ๊ณฑํ•œ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์—ฐ์‚ฐ

 

ํ•„ํ„ฐ (Filter, Mask)

์ž…๋ ฅ๋˜๋Š” ์‹ ํ˜ธ์˜ ์ผ๋ถ€ ์„ฑ๋ถ„์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ผ๋ถ€ ํŠน์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ

 

โœŒ cv2.filter2D(src, ddepth, kernel)

์ปจ๋ณผ๋ฃจ์…˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋กœ src๋Š” ์ž…๋ ฅ ์˜์ƒ, ddepth๋Š” ์ถœ๋ ฅ ์˜์ƒ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ -1๋กœ ์ง€์ •ํ•˜๋ฉด ์ž…๋ ฅ ์˜์ƒ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค. kernel์€ ํ•„ํ„ฐ ํ–‰๋ ฌ์˜ ๊ฐ’์ด๋‹ค.

 

 

๐Ÿ‘€ ์ด์ง„ํ™”

์–ด๋–ค ์ฃผ์–ด์ง„ ์ž„๊ณ„๊ฐ’(threshold) ๋ณด๋‹ค ๋ฐ์€ ํ”ฝ์…€๋“ค์„ ๋ชจ๋‘ ํฐ์ƒ‰์œผ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์€ ํ”ฝ์…€๋“ค์€ ๋ชจ๋‘ ๊ฒ€์€์ƒ‰์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์ด๋‹ค.

 

1๏ธโƒฃ ์ „์—ญ ์ด์ง„ํ™”

๋‹จ์ผ ํ”ฝ์…€ ์ฒ˜๋ฆฌ์˜ ์ข…๋ฅ˜์ธ ์ „์—ญ ์ด์ง„ํ™”๋Š” ๊ฐ ํ”ฝ์…€ ๊ฐ’์ด ๊ณ ์ • ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด 0, ํฌ๋ฉด 255๋กœ ํ”ฝ์…€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค. 

 

โœŒ cv2.threshold(src, thresh, maxval, type)

์ „์—ญ ์ด์ง„ํ™” ํ•จ์ˆ˜๋กœ์จ src๋Š” ์ž…๋ ฅ ์˜์ƒ, thresh๋Š” ์ž„๊ณ„๊ฐ’, maxval์€ ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ํด ๋•Œ ์ ์šฉ๋˜๋Š” ์ตœ๋Œ“๊ฐ’, type์€ ์ž„๊ณ„๊ฐ’ ์ ์šฉ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ฝ”๋“œ์—์„œ์˜ ์ž„๊ณ„๊ฐ’์€ 127์ด๊ณ  maxval์€ 255, cv2.THRESH_BINARY์€ ํ”ฝ์…€ ๊ฐ’์ด thresh๋ณด๋‹ค ํฌ๋ฉด maxval, ์ž‘์œผ๋ฉด 0์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ์ž„๊ณ„๊ฐ’ ์ ์šฉ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ „์—ญ ์ด์ง„ํ™”๋Š” ์ž„๊ณ„๊ฐ’์ด ๊ณ ์ •๋˜์–ด์žˆ๋‹ค๋ณด๋‹ˆ ๋ฐ๊ธฐ ๋ณ€ํ™”๊ฐ€ ์‹ฌํ•œ ์˜์ƒ์—๋Š” ์ž„๊ณ„๊ฐ’ ์„ค์ •์ด ์–ด๋ ต๋‹ค.

 

2๏ธโƒฃ ์ง€์—ญ ์ด์ง„ํ™”

์ „์—ญ ์ด์ง„ํ™”์˜ ๋‹จ์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋ณ€ ์ž„๊ณ„๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ ์ด์ง„ํ™”๊ฐ€ ์žˆ๋‹ค. ํ”ฝ์…€ ๊ทธ๋ฃน ๋‹จ์œ„๋งˆ๋‹ค ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด 0, ํฌ๋ฉด 255๋กœ ํ”ฝ์…€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

โœŒ cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

์ง€์—ญ ์ด์ง„ํ™” ํ•จ์ˆ˜๋กœ์จ src๋Š” ์ž…๋ ฅ ์˜์ƒ, maxvalue๋Š” ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ํด ๋•Œ ์ ์šฉ๋˜๋Š” ์ตœ๋Œ“๊ฐ’, adaptiveMethod๋Š” ์ ์šฉํ•  ์ง€์—ญ ์ด์ง„ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜, thesholdType์€ ์ž„๊ณ„๊ฐ’ ์ ์šฉ ๋ฐฉ๋ฒ•, blocksize๋Š” ์ง€์—ญ ์ด์ง„ํ™”๋ฅผ ํ•  ๋•Œ ๊ณ ๋ คํ•  ์ฃผ๋ณ€ ํ”ฝ์…€ ํฌ๊ธฐ (๋ธ”๋ก ํฌ๊ธฐ), C๋Š” ๋ธ”๋ก ๋‚ด ํ‰๊ท ๊ฐ’์—์„œ ๋บ„ ๊ฐ’(์ž„๊ณ„๊ฐ’์„ ๊ฒฐ์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ)์„ ์˜๋ฏธํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ cv2.ADAPTIVE_THRESH_MEAN_C๋Š” ์ฃผ๋ณ€ ์˜์—ญ์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ์ง€์—ญ ์ด์ง„ํ™”๋ฅผ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

๐Ÿ’ก ๋ธ”๋Ÿฌ๋ง (Blurring)

์ด์›ƒ ํ”ฝ์…€๋“ค์˜ ์ฐจ์ด๋ฅผ ๊ฐ์†Œ์‹œ์ผœ ์˜์ƒ์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ์˜์ƒ์˜ ์žก์Œ(Noise)์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ธ๋‹ค.

๋ธ”๋Ÿฌ๋ง์— ์‚ฌ์šฉ๋˜๋Š” ํ•„ํ„ฐ๋กœ๋Š” ํ‰๊ท ๊ฐ’ ํ•„ํ„ฐ, ๋ฏธ๋””์–ธ ํ•„ํ„ฐ, ๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ๊ฐ€ ์žˆ๋‹ค.

 

1๏ธโƒฃ ํ‰๊ท ๊ฐ’ ํ•„ํ„ฐ

์˜์ƒ์˜ ํŠน์ • ํ”ฝ์…€๊ณผ ์ฃผ๋ณ€ ํ”ฝ์…€๋“ฑ์˜ ์‚ฐ์ˆ  ํ‰๊ท ์„ ๊ฒฐ๊ณผ ์˜์ƒ ํ”ฝ์…€ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ํ•„ํ„ฐ๋กœ์จ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ธ”๋Ÿฌ๋ง ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•„ํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋” ํ๋ ค์ง„๋‹ค.

 

1. 3 X 3 ํ‰๊ท  ๊ฐ’ ํ•„ํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ

2. 5 X 5 ํ‰๊ท  ๊ฐ’ ํ•„ํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ

 

5 X 5 ํ‰๊ท ๊ฐ’ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์‹œ ๋” ํ๋ ค์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค โ—

 

2๏ธโƒฃ ๋ฏธ๋””์–ธ ํ•„ํ„ฐ

์ž…๋ ฅ ์˜์ƒ์—์„œ ์ฃผ๋ณ€ ํ”ฝ์…€๋“ค์˜ ๊ฐ’๋“ค์„ ์˜ค๋ฆ„ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ทธ ์ค‘์•™์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ํ”ฝ์…€ ๊ฐ’์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ์‹์˜ ํ•„ํ„ฐ๋กœ ์†Œ๊ธˆ & ํ›„์ถ” ์žก์Œ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ œ๊ฑฐํ•œ๋‹ค.

 

โœŒ cv2.medianBlur(src, ksize)

src๋Š” ์ž…๋ ฅ ์˜์ƒ, ksize๋Š” ํ•„ํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ•„ํ„ฐ์˜ ํฌ๊ธฐ๋Š” 3,5,9๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

3๏ธโƒฃ ๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ

๊ฐ€์šฐ์‹œ์•ˆ ๋ถ„ํฌ๋ฅผ ์ด์šฉํ•œ ์ •๊ทœํ™” ํ•„ํ„ฐ๋กœ์จ ๋ชจ๋“  ๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ์˜ ํ•ฉ์€ 1์ด๋‹ค. ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

3 X 3์˜ ๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ์™€ 5 X 5์˜ ๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜์˜€๋‹ค. ์ž์„ธํžˆ ๋ณด๋ฉด ํฌ๊ธฐ๊ฐ€ 5์ธ ํ•„ํ„ฐ๊ฐ€ ๋” ํ๋ฆฌ๋‹ค.

 

โœŒ cv2.getGaussianKernel(ksize, sigma, ktype)

๊ฐ€์šฐ์‹œ์•ˆ ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ•จ์ˆ˜๋กœ์จ ksize๋Š” ํ•„ํ„ฐ ํฌ๊ธฐ, sigma๋Š” ๊ฐ€์šฐ์‹œ์•ˆ ํ•จ์ˆ˜ ์‹ ์ค‘ ์‹œ๊ทธ๋งˆ ๊ฐ’, ktype์€ ํ•„ํ„ฐ ํƒ€์ž…์„ ์˜๋ฏธํ•˜๋ฉฐ default ๊ฐ’์€ float64์ด๋‹ค. 

 

 

๐Ÿ’ก ์ƒคํ”„๋‹ (Sharpening)

์ด์›ƒ ํ”ฝ์…€๋“ค์˜ ์ฐจ์ด๋ฅผ ํฌ๊ฒŒ ๋งŒ๋“ค์–ด ์˜์ƒ์„ ๋‚ ์นด๋กญ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

์ด 3๊ฐ€์ง€์˜ ์ƒคํ”„๋‹ ํ•„ํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ๋”์šฑ ์ƒคํ”„๋‹ ๋œ ์‚ฌ์ง„์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

+ Recent posts