저번 포스팅에서는 KNN알고리즘의 이론에 대해 알아보았습니다.
오늘은 깃허브에서 KNN알고리즘을 활용해서 색상 분류를 적용시킨 알고리즘에 대해 알아보도록 하겠습니다.
(출처:https://github.com/ahmetozlu/color_recognition)
색상을 분류하기 위한 알고리즘은 아래와 같습니다.
컬러 히스토그램을 통해 색상 특징점들을 추출하고 KNN알고리즘을 분류 알고리즘으로 사용하고 있습니다.
컬러 이미지의 경우 RGB, HSV, HSI 등 다양한 색상공간으로 나타낼 수 있습니다.
RGB의 경우 Red,Green,Blue 3가지 색상을 조합하여 모든 색을 표현하게 됩니다. 그래서 이미지 한장을 N x N 매트릭스로 보게 될 경우
흑백 이미지의 경우 N x N 1개의 매트릭스, 컬러 이미지의 경우 R,G,B 각각 한개의 매트릭스를 가지고 있어서 NxNx3으로 보통 되어 있습니다.
먼저 컬러 히스토그램을 사용해 이미지의 색상 특징점들을 추출하게 됩니다. (Feature Extraction -> Color Histogram)
예시로, 아래 빨간색 이미지의 컬러 히스토그램 값을 보겠습니다.
빨간색 이미지의 경우 R,G,B값중 R값이 굉장히 높게 나올 것을 볼 수 있습니다.
벡터화하여 추출해낸다면 [254,0,2] 와 같은 값이 나오는것을 확인할 수 있습니다.
추출 된 특징점들을 KNN알고리즘을 활용하여 색상을 분류하게 됩니다. 색상은 빨간색, 검은색, 초록색, 주황색 등 총 8가지를 분류가 가능한 코드입니다.
결과를 한번 볼까요? 아래 검은 고양이 이미지를 검은색으로 분류하고 있습니다.
바나나 이미지로 테스트를 해보겠습니다.
노란색이 많다보니 색상을 노란색으로 잘 분류를 하고 있는 것을 확인할 수 있습니다.
그러면 또 다른 이미지로 테스트를 해보겠습니다. 다양한 색상들의 과일들이 모여있는 이미지입니다.
아래 같은 이미지로 테스트 했을 경우 검은색이라고 분류를 하고 있습니다. 다양한 색상들의 과일들이 있는데 왜 검은색으로 분류하였을까요?
KNN알고리즘의 이론을 다시 한번 생각해보시면서 유추해보시면 좋을 것 같습니다