๐Ÿ˜Hog

HOG ๋””์Šคํฌ๋ฆฝํ„ฐ

HOG(Histogram of Oriented Gradient)๋Š” ๋ณดํ–‰์ž ๊ฒ€์ถœ์„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ ์ค‘ ํ•˜๋‚˜๋กœ ์—ฃ์ง€์˜ ๊ธฐ์šธ๊ธฐ ๋ฐฉํ–ฅ๊ณผ ๊ทœ๋ชจ๋ฅผ ํžˆ์Šคํ† ๊ทธ๋žจ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ.
SIFT, SURF, ORB ๋“ฑ๊ณผ ๊ฐ™์€ ํŠน์ง• ์Šคํฌ๋ฆฝํ„ฐ๋“ค์€ ํŠน์ง•์  ํ•˜๋‚˜ํ•˜๋‚˜์— ๋Œ€ํ•ด์„œ ์„œ์ˆ ํ•˜๊ณ  ์žˆ์–ด์„œ ๊ฐ์ฒด์˜ ์ง€์—ญ์  ํŠน์„ฑ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ๋Š” ๋›ฐ์–ด๋‚˜์ง€๋งŒ, ์ „์ฒด์ ์ธ ๋ชจ์–‘์„ ํŠน์ง•์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
๊ทธ์— ๋ฐ˜์—์„œ. HOG๋Š” ๋Œ€์ƒ ๊ฐ์ฒด์˜ ์ƒํƒœ๋‚˜ ์ž์„ธ๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅด ๋”๋ผ๋„ ๊ทธ ํŠน์ง•์„ ์ผ๋ฐ˜ํ™”ํ•ด์„œ ๊ฐ™์€ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

์ž‘์—…์ˆœ์„œ

  1. ์ „์ฒด ์ด๋ฏธ์ง€์—์„œ ์ธ์‹ํ•˜๊ณ ์ž ํ•˜๋Š” ์˜์—ญ์„ ์ž˜๋ผ๋‚ด์•ผํ•œ๋‹ค. ์ด๊ฒƒ์„ ์œˆ๋„(window)๋ผ๊ณ  ํ•จ.

  2. ์ž˜๋ผ๋‚ธ ์˜์—ญ์„ ์†Œ๋ฒจ ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์—ฃ์ง€์˜ ๊ธฐ์šธ๊ธฐ gx, gy๋ฅผ ๊ตฌํ•˜๊ณ , ๊ธฐ์šธ๊ธฐ์˜ ๋ฐฉํ–ฅ๊ณผ ํฌ๊ธฐ ๊ณ„์‚ฐ

img = cv2.imread('img.png')
img = np.flaot(img)

gx = cv.Sobel(img, cv.CV_32F, 1, 0)
gy = cv.Sobel(img, cv.CV_32F, 0, 1)
magnitude, angle = cv.cartToPolar(gx, gy) 

HOG API

  • descriptor = cv2.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins): HOG ํฌ์Šค๋ฆฝํ„ฐ ์ถ”์ถœ๊ธฐ ์ƒ์„ฑ

winSize : ์œˆ๋„ ํฌ๊ธฐ, HOG ์ถ”์ถœ ์˜์—ญ
blockSize: ๋ธ”๋ก ํฌ๊ธฐ, ์ •๊ทœํ™” ์˜์—ญ
blockStride : ์ •๊ทœํ™” ๋ธ”๋ก ๊ฒธ์นจ ํฌ๊ธฐ
cellSize : ์…€ ํฌ๊ธฐ, ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„์‚ฐ ์˜์—ญ
nbins : ํžˆ์Šคํ† ๊ทธ๋žจ ๊ณ„๊ธ‰ ์ˆ˜
descriptor : HOG ํŠน์ง• ๋””์Šคํฌ๋ฆฝํ„ฐ ์ถ”์ถœ๊ธฐ

  • hog = descriptor.compute(img): HOG ๊ณ„์‚ฐ

img : ๊ณ„์‚ฐ ๋Œ€์ƒ ์ด๋ฏธ์ง€
hog : HOG ํŠน์ง• ์Šคํฌ๋ฆฝํ„ฐ ๊ฒฐ๊ณผ

๋ณดํ–‰์ž ์ธ์‹์„ ์œ„ํ•œ ๋ฏธ๋ฆฌ ํ›ˆ๋ จ๋œ HOG API

  • svmdetector = cv2.HOGDescriptor_getDefaultPeopleDetector() : 64x128 ์œˆ๋„ ํฌ๊ธฐ๋กœ ํ›ˆ๋ จ๋œ ๋ชจ๋ธ

  • svmdetector = cv2.HOGDescriptor_getDaimlerPeopleDetector(): 48x96 ์œˆ๋„ ํฌ๊ธฐ๋กœ ํ›ˆ๋ จ๋œ ๋ชจ๋ธ

  • descriptor = cv2.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins) : HOG ์ƒ์„ฑ

  • descriptor.setSVMDetector(svmdetector) : ํ›ˆ๋ จ๋œ SVM ๋ชจ๋ธ ์„ค์ •

  • rects, weights = descriptor. detectMultiScale(img) : ๊ฐ์ฒด ๊ฒ€์ถœ

img: ๊ฒ€์ถœํ•˜๊ณ ์ž ํ•˜๋Š” ์ด๋ฏธ์ง€
rects: ๊ฒ€์ถœ๋œ ๊ฒฐ๊ณผ ์˜์—ญ ์ขŒํ‘œ NX4(x,y,w,h)
weights: ๊ฒ€์ถœ๋œ ๊ฒฐ๊ณผ ๊ณ„์ˆ˜ N X 1

์‹ค์Šต