๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[v0.12]์˜์ƒ์ฒ˜๋ฆฌ_ํžˆ์Šคํ† ๊ทธ๋žจ(Histogram) ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Image Processing

[v0.12]์˜์ƒ์ฒ˜๋ฆฌ_ํžˆ์Šคํ† ๊ทธ๋žจ(Histogram)

์ง•์ง•์•ŒํŒŒ์นด 2022. 1. 5. 00:35
728x90
๋ฐ˜์‘ํ˜•

220104 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ๊ท€ํ‰์ด ์„œ์žฌ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค>

https://bkshin.tistory.com/entry/OpenCV-10-%ED%9E%88%EC%8A%A4%ED%86%A0%EA%B7%B8%EB%9E%A8?category=1148027 

 

OpenCV - 10. ํžˆ์Šคํ† ๊ทธ๋žจ๊ณผ ์ •๊ทœํ™”(Normalize), ํ‰ํƒ„ํ™”(Equalization), CLAHE

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํžˆ์Šคํ† ๊ทธ๋žจ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ… ์—ญ์‹œ 'ํŒŒ์ด์ฌ์œผ๋กœ ๋งŒ๋“œ๋Š” OpenCV ํ”„๋กœ์ ํŠธ(์ด์„ธ์šฐ ์ €)'๋ฅผ ์ •๋ฆฌํ•œ ๊ฒƒ์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ์ฝ”๋“œ: github.com/BaekKyunShin/OpenCV_Project_Python/tr

bkshin.tistory.com

 

 

 

 

 

 

1. ํžˆ์Šคํ† ๊ทธ๋žจ

:  ๋„์ˆ˜ ๋ถ„ํฌํ‘œ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ

: ๋ฌด์—‡์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด ๋†“์€ ๊ฒƒ์„ ๊ทธ๋ž˜ํ”„

 

 

cv2.calHist(img, channel, mask, histSize, ranges)

: ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ตฌํ˜„

 

- img : ์ด๋ฏธ์ง€ ์˜์ƒ, [img]์ฒ˜๋Ÿผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ์‹ธ์„œ ์ „๋‹ฌ
- channel : ๋ถ„์„ ์ฒ˜๋ฆฌํ•  ์ฑ„๋„, ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ์‹ธ์„œ ์ „๋‹ฌ

  • 1 ์ฑ„๋„: [0], 2 ์ฑ„๋„: [0, 1], 3 ์ฑ„๋„: [0, 1, 2]

- mask : ๋งˆ์Šคํฌ์— ์ง€์ •ํ•œ ํ”ฝ์…€๋งŒ ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ, None์ด๋ฉด ์ „์ฒด ์˜์—ญ
- histSize : ๊ณ„๊ธ‰(Bin)์˜ ๊ฐœ์ˆ˜, ์ฑ„๋„ ๊ฐœ์ˆ˜์— ๋งž๊ฒŒ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„

 

  • 1 ์ฑ„๋„: [256], 2 ์ฑ„๋„: [256, 256], 3 ์ฑ„๋„: [256, 256, 256]

- ranges : ๊ฐ ํ”ฝ์…€์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„, RGB์ธ ๊ฒฝ์šฐ [0, 256]

# ํšŒ์ƒ‰์กฐ 1์ฑ„๋„ ํžˆ์Šคํ† ๊ทธ๋žจ
import cv2
import numpy as np
import matplotlib.pylab as plt

#--โ‘  ์ด๋ฏธ์ง€ ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ๋กœ ์ฝ๊ธฐ ๋ฐ ์ถœ๋ ฅ
img = cv2.imread('img/tree_gray.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('img', img)

#--โ‘ก ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ ๋ฐ ๊ทธ๋ฆฌ๊ธฐ
hist = cv2.calcHist([img], [0], None, [256], [0,256])
plt.plot(hist)

print("hist.shape:", hist.shape)  #--โ‘ข ํžˆ์Šคํ† ๊ทธ๋žจ์˜ shape (256,1)
print("hist.sum():", hist.sum(), "img.shape:",img.shape) #--โ‘ฃ ํžˆ์Šคํ† ๊ทธ๋žจ ์ด ํ•ฉ๊ณ„์™€ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ
plt.show()

ํšŒ์ƒ‰ ์ด๋ฏธ์ง€์˜ 1์ฑ„๋„ [0] ํžˆ์Šคํ† ๊ทธ๋žจ

 

 

# ์ƒ‰์ƒ ์ด๋ฏธ์ง€ ํžˆ์Šคํ† ๊ทธ๋žจ
import cv2
import numpy as np
import matplotlib.pylab as plt

#--โ‘  ์ด๋ฏธ์ง€ ์ฝ๊ธฐ ๋ฐ ์ถœ๋ ฅ
img = cv2.imread('img/sunflower.jpg')
cv2.imshow('img', img)

#--โ‘ก ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ ๋ฐ ๊ทธ๋ฆฌ๊ธฐ
channels = cv2.split(img)
colors = ('b', 'g', 'r')
for (ch, color) in zip (channels, colors):
    hist = cv2.calcHist([ch], [0], None, [256], [0, 256])
    plt.plot(hist, color = color)
plt.show()

์ƒ‰์ƒ ์ด๋ฏธ์ง€์˜ 3์ฑ„๋„ (์ฆ‰, RGB) ํžˆ์Šคํ† ๊ทธ๋žจ

-  img๋Š” ์ƒ‰์ƒ ์ด๋ฏธ์ง€์ด๋ฏ€๋กœ 3 ์ฑ„๋„ ์ด๋ฏธ์ง€

- cv2.split(img)์„ ํ•ด์ฃผ๋ฉด ๋นจ๊ฐ•, ํŒŒ๋ž‘, ์ดˆ๋ก์˜ ๊ฐ 1 ์ฑ„๋„ ์ด๋ฏธ์ง€๋กœ ๋‚˜๋‰˜์–ด์„œ 3์ฑ„๋„์„ ๊ฐ€์ง„๋‹ค

- ํ•˜๋Š˜ ์˜์—ญ์ด ๋งŽ์•„์„œ ํŒŒ๋ž€์ƒ‰ ๋ถ„ํฌ๊ฐ€ ํฌ๋‹ค

 

 

 

 

2. ์ •๊ทœํ™”(Normalization)

: ํŠน์ • ์˜์—ญ์— ๋ชฐ๋ ค ์žˆ๋Š” ๊ฒฝ์šฐ ํ™”์งˆ์„ ๊ฐœ์„ 

: ์ด๋ฏธ์ง€ ๊ฐ„์˜ ์—ฐ์‚ฐ ์‹œ ์„œ๋กœ ์กฐ๊ฑด์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๊ฐ™์€ ์กฐ๊ฑด์œผ๋กœ ๋งŒ๋“ค๊ธฐ

 

dst = cv2.normalize(src, dst, alpha, beta, type_flag)
- src : ์ •๊ทœํ™” ์ด์ „์˜ ๋ฐ์ดํ„ฐ
- dst : ์ •๊ทœํ™” ์ดํ›„์˜ ๋ฐ์ดํ„ฐ
- alpha : ์ •๊ทœํ™” ๊ตฌ๊ฐ„ 1
- beta : ์ •๊ทœํ™” ๊ตฌ๊ฐ„ 2, ๊ตฌ๊ฐ„ ์ •๊ทœํ™”๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์‚ฌ์šฉ ์•ˆ ํ•จ
- type_flag : ์ •๊ทœํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ ํ”Œ๋ž˜๊ทธ ์ƒ์ˆ˜

  • cv2.NORM_MINMAX : alpha์™€ beta ๊ตฌ๊ฐ„์œผ๋กœ ์ •๊ทœํ™”
  • cv2.NORM_L1 : ์ „์ฒด ํ•ฉ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
  • cv2.NORM_L2 : ๋‹จ์œ„ ๋ฒกํ„ฐ๋กœ ์ •๊ทœํ™” ํ•˜๊ธฐ
  • cv2.NORM_INF : ์ตœ๋Œ“๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

 

# ํžˆ์Šคํ† ๊ทธ๋žจ ์ •๊ทœํ™”
import cv2
import numpy as np
import matplotlib.pylab as plt

#--โ‘  ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ๋กœ ์˜์ƒ ์ฝ๊ธฐ
img = cv2.imread('img/hist_unequ.jpg', cv2.IMREAD_GRAYSCALE)

#--โ‘ก ์ง์ ‘ ์—ฐ์‚ฐํ•œ ์ •๊ทœํ™”
img_f = img.astype(np.float32)
img_norm = ((img_f - img_f.min()) * (255) / (img_f.max() - img_f.min()))
img_norm = img_norm.astype(np.uint8)

#--โ‘ข OpenCV API๋ฅผ ์ด์šฉํ•œ ์ •๊ทœํ™”
img_norm2 = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)

#--โ‘ฃ ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ
hist = cv2.calcHist([img], [0], None, [256], [0, 255])
hist_norm = cv2.calcHist([img_norm], [0], None, [256], [0, 255])
hist_norm2 = cv2.calcHist([img_norm2], [0], None, [256], [0, 255])

cv2.imshow('Before', img)
cv2.imshow('Manual', img_norm)
cv2.imshow('cv2.normalize()', img_norm2)

hists = {'Before' : hist, 'Manual':hist_norm, 'cv2.normalize()':hist_norm2}
for i, (k, v) in enumerate(hists.items()):
    plt.subplot(1,3,i+1)
    plt.title(k)
    plt.plot(v)
plt.show()

 

ํฌ๋ฏธํ•œ ์ด๋ฏธ์ง€                                        ๊ณต์‹์œผ๋กœ ์ •๊ทœํ™”                                   cv2.normalize๋กœ ์ •๊ทœํ™”
ํžˆ์Šคํ† ๊ทธ๋žจ

- ์ •๊ทœํ™” ์ „์—๋Š” ํ”ฝ์…€ ๊ฐ’์ด ์ค‘์•™์— ๋ชจ์ž„

- ์ •๊ทœํ™” ํ›„์—๋Š” ํ”ฝ์…€ ๊ฐ’์ด ์ „์ฒด์ ์œผ๋กœ ํผ์ ธ์„œ ํ™”์งˆ์ด ๊ฐœ์„ 

 

 

 

 

3. ํ‰ํƒ„ํ™” (Equalization)

: ๊ฐ๊ฐ์˜ ๊ฐ’์ด ์ „์ฒด ๋ถ„ํฌ์— ์ฐจ์ง€ํ•˜๋Š” ๋น„์ค‘์— ๋”ฐ๋ผ ๋ถ„ํฌ๋ฅผ ์žฌ๋ถ„๋ฐฐ

: ๋ช…์•” ๋Œ€๋น„๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ 

: ์ „์ฒด ์˜์—ญ์— ๊ณจ๊ณ ๋ฃจ ๋ถ„ํฌ๊ฐ€ ๋˜์–ด ์žˆ์„ ๋•Œ ์ข‹์€ ์ด๋ฏธ์ง€

 

1) ํžˆ์Šคํ† ๊ทธ๋žจ ํ‰ํƒ„ํ™” (Histogram Equalization)

: ์ขŒ์ธก์ฒ˜๋Ÿผ ํŠน์ • ์˜์—ญ์— ์ง‘์ค‘๋˜์–ด ์žˆ๋Š” ๋ถ„ํฌ๋ฅผ ์˜ค๋ฅธ์ชฝ์ฒ˜๋Ÿผ ๊ณจ๊ณ ๋ฃจ ๋ถ„ํฌํ•˜๋„๋ก ํ•˜๋Š” ์ž‘์—…์„ ํžˆ์Šคํ† ๊ทธ๋žจ ํ‰ํƒ„ํ™”

์ถœ์ฒ˜: Wikipedia

dst = cv2.equalizeHist(src, dst)
- src : ๋Œ€์ƒ ์ด๋ฏธ์ง€, 8๋น„ํŠธ 1 ์ฑ„๋„
- dst(optional) : ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€

 

+) ํšŒ์ƒ‰์กฐ ์ด๋ฏธ์ง€ ํ‰ํƒ„ํ™”

# ํšŒ์ƒ‰์กฐ ์ด๋ฏธ์ง€์— ํ‰ํƒ„ํ™” ์ ์šฉ
import cv2
import numpy as np
import matplotlib.pylab as plt

#--โ‘  ๋Œ€์ƒ ์˜์ƒ์œผ๋กœ ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ๋กœ ์ฝ๊ธฐ
img = cv2.imread('img/yate.jpg', cv2.IMREAD_GRAYSCALE)
rows, cols = img.shape[:2]

#--โ‘ก ์ดํ€„๋ผ์ด์ฆˆ ์—ฐ์‚ฐ์„ ์ง์ ‘ ์ ์šฉ
hist = cv2.calcHist([img], [0], None, [256], [0, 256]) #ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ
cdf = hist.cumsum()                                     # ๋ˆ„์  ํžˆ์Šคํ† ๊ทธ๋žจ 
cdf_m = np.ma.masked_equal(cdf, 0)                      # 0(zero)์ธ ๊ฐ’์„ NaN์œผ๋กœ ์ œ๊ฑฐ
cdf_m = (cdf_m - cdf_m.min()) /(rows * cols) * 255      # ์ดํ€„๋ผ์ด์ฆˆ ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ
cdf = np.ma.filled(cdf_m,0).astype('uint8')             # NaN์„ ๋‹ค์‹œ 0์œผ๋กœ ํ™˜์›
print(cdf.shape)
img2 = cdf[img]                                         # ํžˆ์Šคํ† ๊ทธ๋žจ์„ ํ”ฝ์…€๋กœ ๋งตํ•‘

#--โ‘ข OpenCV API๋กœ ์ดํ€„๋ผ์ด์ฆˆ ํžˆ์Šคํ† ๊ทธ๋žจ ์ ์šฉ
img3 = cv2.equalizeHist(img)

#--โ‘ฃ ์ดํ€„๋ผ์ด์ฆˆ ๊ฒฐ๊ณผ ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ
hist2 = cv2.calcHist([img2], [0], None, [256], [0, 256])
hist3 = cv2.calcHist([img3], [0], None, [256], [0, 256])

#--โ‘ค ๊ฒฐ๊ณผ ์ถœ๋ ฅ
cv2.imshow('Before', img)
cv2.imshow('Manual', img2)
cv2.imshow('cv2.equalizeHist()', img3)
hists = {'Before':hist, 'Manual':hist2, 'cv2.equalizeHist()':hist3}
for i, (k, v) in enumerate(hists.items()):
    plt.subplot(1,3,i+1)
    plt.title(k)
    plt.plot(v)
plt.show()

ํฌ๋ฏธํ•œ ์ด๋ฏธ์ง€                            ๊ณต์‹์œผ๋กœ ์ •๊ทœํ™”                             cv2.normalize๋กœ ์ •๊ทœํ™”
ํ‰ํƒ„ํ™”ํ•œ ํžˆ์Šคํ† ๊ทธ๋žจ

- ๋ช…์•” ๋Œ€๋น„๊ฐ€ ๋‚ฎ์€ ๋ถ€๋‘ฃ๊ฐ€ ์ด๋ฏธ์ง€์˜ ํ™”์งˆ์ด ๊ฐœ์„ 

- ๊นƒ๋ฐœ์— ์ ํžŒ ๋‹จ์–ด๊ฐ€ ๋” ๋šœ๋ ทํ•˜๊ฒŒ ๋จ

- ๋ถ€๋‘ฃ๊ฐ€ ๋ฐ”๋‹ฅ์ด ์ข€๋” ๋ฐ์•„์ง

 

 

+) ์ƒ‰์ƒ ์ด๋ฏธ์ง€ ํ‰ํƒ„ํ™”

# ์ƒ‰์ƒ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ํ‰ํƒ„ํ™” ์ ์šฉ
import numpy as np, cv2

img = cv2.imread('img/yate.jpg') #์ด๋ฏธ์ง€ ์ฝ๊ธฐ, BGR ์Šค์ผ€์ผ

#--โ‘  ์ปฌ๋Ÿฌ ์Šค์ผ€์ผ์„ BGR์—์„œ YUV๋กœ ๋ณ€๊ฒฝ
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV) 

#--โ‘ก YUV ์ปฌ๋Ÿฌ ์Šค์ผ€์ผ์˜ ์ฒซ๋ฒˆ์งธ ์ฑ„๋„์— ๋Œ€ํ•ด์„œ ์ดํ€„๋ผ์ด์ฆˆ ์ ์šฉ
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0]) 

#--โ‘ข ์ปฌ๋Ÿฌ ์Šค์ผ€์ผ์„ YUV์—์„œ BGR๋กœ ๋ณ€๊ฒฝ
img2 = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR) 

cv2.imshow('Before', img)
cv2.imshow('After', img2)
cv2.waitKey()
cv2.destroyAllWindows()

์ƒ‰์ƒ ์ด๋ฏธ์ง€์˜ ํ‰ํƒ„ํ™”

- ํ‰ํƒ„ํ™” ์‚ฌ์šฉ ํ›„ ์ด๋ฏธ์ง€๊ฐ€ ๋” ์„ ๋ช…

- ์š”ํŠธ๊ฐ€ ๋” ๋ฐ์•„์ง€๊ณ  ํ™”์งˆ์ด ์ข‹์•„์ง

- ์ „์ฒด์ ์œผ๋กœ ๋” ๋ฐ์•„์ง

- ์ด๋ฏธ์ง€์˜ ์„ ๋ช…๋„๊ฐ€ ๋†’์•„์ง

 

 

 

 

4. CLAHE (Contrast Limited Adaptive Histogram Equalization)

ํ‰ํƒ„ํ™”

: ์ด๋ฏธ์ง€์˜ ๋ฐ์€ ๋ถ€๋ถ„์ด ๋‚ ๋ผ๊ฐ

: ๊ฒฝ๊ณ„์„ ์„ ์•Œ์•„๋ณผ ์ˆ˜ ์—†์Œ

: ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ผ์ •ํ•œ ์˜์—ญ(tileGridSize ํŒŒ๋ผ๋ฏธํ„ฐ) ์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ‰ํƒ„ํ™” ์ ์šฉ

: ํ•˜์ง€๋งŒ ๋…ธ์ด์ฆˆ๊ฐ€ ์ƒ๊ฒจ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

 

CLAHE

: ์–ด๋–ค ์˜์—ญ์ด๋“  ์ง€์ •๋œ ์ œํ•œ ๊ฐ’(์•„๋ž˜ ์ฝ”๋“œ์—์„œ clipLimit ํŒŒ๋ผ๋ฏธํ„ฐ)์„ ๋„˜์œผ๋ฉด ๊ทธ ํ”ฝ์…€์€ ๋‹ค๋ฅธ ์˜์—ญ์— ๊ท ์ผํ•˜๊ฒŒ ๋ฐฐ๋ถ„ํ•˜์—ฌ ์ ์šฉ

์ถœ์ฒ˜: Wikipedia

clahe = cv2.createCLAHE(clipLimit, tileGridSize)
- clipLimit : ๋Œ€๋น„(Contrast) ์ œํ•œ ๊ฒฝ๊ณ„ ๊ฐ’, default=40.0
- tileGridSize : ์˜์—ญ ํฌ๊ธฐ, default=8 x 8
- clahe : ์ƒ์„ฑ๋œ CLAHE ๊ฐ์ฒด

 

clahe.apply(src)

: CLAHE ์ ์šฉ
- src : ์ž…๋ ฅ ์ด๋ฏธ์ง€

# CLAHE ์ ์šฉ
import cv2
import numpy as np
import matplotlib.pylab as plt

#--โ‘ ์ด๋ฏธ์ง€ ์ฝ์–ด์„œ YUV ์ปฌ๋Ÿฌ์ŠคํŽ˜์ด์Šค๋กœ ๋ณ€๊ฒฝ
img = cv2.imread('img/clahe.png')
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)

#--โ‘ก ๋ฐ๊ธฐ ์ฑ„๋„์— ๋Œ€ํ•ด์„œ ์ดํ€„๋ผ์ด์ฆˆ ์ ์šฉ
img_eq = img_yuv.copy()
img_eq[:,:,0] = cv2.equalizeHist(img_eq[:,:,0])
img_eq = cv2.cvtColor(img_eq, cv2.COLOR_YUV2BGR)

#--โ‘ข ๋ฐ๊ธฐ ์ฑ„๋„์— ๋Œ€ํ•ด์„œ CLAHE ์ ์šฉ
img_clahe = img_yuv.copy()
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8)) #CLAHE ์ƒ์„ฑ
img_clahe[:,:,0] = clahe.apply(img_clahe[:,:,0])           #CLAHE ์ ์šฉ
img_clahe = cv2.cvtColor(img_clahe, cv2.COLOR_YUV2BGR)

#--โ‘ฃ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
cv2.imshow('Before', img)
cv2.imshow('CLAHE', img_clahe)
cv2.imshow('equalizeHist', img_eq)
cv2.waitKey()
cv2.destroyAllWindows()

์›๋ณธ                                        CLAHE                                            ํ‰ํƒ„ํ™”

- ํ‰ํƒ„ํ™” ํ•  ๋•Œ๋Š” ๋ฐ์•„์ ธ์„œ ์ด๋ฏธ์ง€๊ฐ€ ๋‚ ๋ผ๊ฐ

- CLAHE ํ•  ๋•Œ๋Š” ํ”ฝ์…€์„ ๊ท ์ผํ•˜๊ฒŒ ๋ฐฐ๋ถ„ํ•˜์—ฌ ์ด๋ฏธ์ง€๊ฐ€ ๊ฐœ์„ ๋จ

- CLAHE ์ ์šฉํ•  ๋•Œ๋Š” CLAHE ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ณ , ๊ฐ์ฒด์— apply() ํ•จ์ˆ˜ ์ ์šฉํ•˜๊ธฐ !

 

 

 

 

 

์žฌ๋ฐŒ๋‹ค. ์ˆ˜์—…์‹œ๊ฐ„์— ๋ฐฐ์šด ์ด์•ผ๊ธฐ๋“ค์ด๊ตฐ..!

728x90
๋ฐ˜์‘ํ˜•
Comments