이미지 양자화 ( image quantization )
- 연속적인 색상이나 grayscale값을 유한한 수의 값으로 변환하는 과정
- 주로 이미지를 압축하거나 디지털화 할때 사용
- 이미지가 표현할 수 있는 색상을 제한해서 파일의 크기를 줄이기 or 처리 속도 향상을 가져온다
사용한 이미지
- 우선 위와 같이 opencv로 이미지를 읽어왓서 rgb로 변환 시켰다.
- 1. 우선 rgb로 이미지를 변환해서 shape을 확인했다
- ( 각각 하나의 데이터는 [ R , G , B ]형식으로 데이터가 존재할거임. 이러한게 824x539개 존재)
- 2. 그리고 처리를 위해서 reshape( -1 , 3 )으로 평탄화를 시킴
- 3. 평탄화 시킨 데이터의 shape을 확인
- 기존의 [ R , G , B ]형식으로 된 데이터 쌍이 134581개가 존재하며, 총 픽셀은 444136개이다.
- 우선 k-means clustering을 할것이니 종료조건을 튜플로 설정
- 1. k-means 클러스터링을 사용하였으며, 총 5개의 클러스터로 rgb값을 분류하였다.
- 2. compactness는 cluster내 데이터간 거리의 합이다.
- 3. labels는 총 0~4이다.
- 4. centers는 각 레이블에 대한 색상값이다. 나중에 출력할 이미지는 해당 5가지중 1가지로만 표한할 것이다.
- 5. 그냥 쉐입 확인
- 1. centers리스트에 labels를 넣어서, 결과를 만들거임.
- labels에 맞는 값을 centers애서 찾아서 colours에 저장하는 방식
- 2. 출력
- 3. 쉡입을 확인
- 4. 평탄화
- 5. 다시 쉡입 확인
- 6. 위에서는 [ R , G , B ]형식으로 된 데이터 쌍이 134581개였다면, 양자화를 하고 난 뒤 5개로 줄었다.
기존 이미지의 shape과 맞게 reshape하고, 출력해봄
- 위에 해당되는 이미지를 가져온다. 그리고 img를 sub_img들로 나눈다.
- 1. 튜플로 k-means clustering의 종료 조건 설정
- 2. k-means clustering을 실행한다.
- 20 x 20 이미지이니 각각 픽셀들과 중심들의 거리 차이를 구할것이다. 그러면 총 1장당 400 x 10의 계산을 할것이며, 시도 횟수는 10이니 총 40000이다.
- 3. compactness는 각 클러스터내의 데이터간의 거리들의 합이다.
- 4. cluster는 각 클러스터가 속한 번호이다.
- 5.center는 각 클러스터의 평균값(중심점)이다.
- 6. cluster의 shape확인
- 7. centers의 shape확인
- 1. k-means로 얻은 클러스터 중심들을 20x20 이미지로 변환
- 2. 클러스터의 중심점들을 시각화하기 위해서 2x5의 서브플롯 생성 및 시각화
- 1. 위에 출력된것을 보고, 각 클러스터에 해당되는 정답 레이블을 적어주자
- 2. 우선 예측값을 저장할 list를 0으로 체우자. shape은 위에서도 알다싶이 labels_true의 shape은 (5000,1)이다.
- 3. for문을 돌면서, 각 클러스터 번호에 i에 해당되는 예측된 라벨을 실제 라벨에 맞게 정렬
- cluster.ravel로 우선 2D -> 1D로 바꾼다. 그리고 i와 같은 값을 가지면 해당되는 값을 True로 저장하고 아니면 False로 저장
- labels_pred[ True ]인것들만 labels[i]에 해당되는 값을 넣어준다
- 정확도 계산 및 시각화
- 가로는 predicted, 세로는 expected이다.