파이썬의 이미지 클러스터링 달성

비디오 프로젝트는 클러스터링을 사용하기 전후 ENVI 달성하고 있기 때문에, 지금 파이썬에서 배우고 싶어한다.
작은 클러스터 사업이 하나의 학습

수입 CV2의
PLT의 등 수입 matplotlib.pyplot
순이익 등의 수입 NumPy와

====== ====== 제제

원 화상 경로

imPath = 'C : \ 사용자 \ LP 바탕 화면 \의 photo.jpg를 \'

읽기 이미지

원점 = cv2.imread (imPath)

그레이 스케일로 이미지를 변환

원점 cv2.cvtColor = (원점 cv2.COLOR_BGR2GRAY)

이미지 크기

H는, W = origin.shape의
인쇄 ( "원래 화상 크기는 {} * {}". 형식 (H, W))

줌 배율을 설정, 계수 스케일링의 큰 정도가 강해

알파 = INT (입력 ( "\ n 스케일링 팩터를 입력"))

이미지 크기 조정

INT = NEWH (H / 알파)
neww = INT (W / 알파)
인쇄 ( "\ n 영상 크기를 축소 한 후 {} * {}."형식 (NEWH, neww))
기원 = cv2.resize (원점 (neww , NEWH))

설정은 여러 범주로 구분됩니다

numOfClass = INT (입력 ( "\ n 색상 구분 번호"))

최대 반복 수를 설정합니다

roundForLoop = INT (입력 ( "\의 n은 반복의 최대 수를 정의한다 :"))
프린트 ()

====== ====== 클러스터

인쇄 ( "---- ---- 시작 클러스터링")

최대 씩 최소 간격은 중심 포인트를 초기화 numOfClass

이 valueArange = () origin.max - origin.min ()를
keyValueList = 중심점의 값을 저장하기위한 [] #에 numOfClass

전 범위 (1 numOfClass + 1)의 경우 :
keyValueList.append (valueArange / numOfClass * I / 2)

클러스터 업데이트 keyValueList

flagMatrix np.zeros = ((NEWH, newW))

범위 (roundForLoop)에 대한 R :

for row in range(newH):

    for col in range(newW):

        temp = []

        for i in range(numOfClass):
            temp.append(np.abs(origin[row, col] - keyValueList[i]))

        # 获得该像素点最近的类
        index = temp.index(min(temp))
        # 存入flag矩阵
        flagMatrix[row, col] = index

# 更新keyValueList
temp = np.zeros(numOfClass)
ct = np.zeros(numOfClass)

for row in range(newH):

    for col in range(newW):
        temp[int(flagMatrix[row, col])] += origin[row, col]
        ct[int(flagMatrix[row, col])] += 1

for i in range(numOfClass):
    keyValueList[i] = temp[i] / ct[i]

print("完成 : {} / {}".format(r + 1, roundForLoop))

표시 화상은 처리가 축소 될

plt.subplot (121)
plt.imshow (원점)
plt.title ( "원본 이미지")

쇼 클러스터링 결과

plt.subplot (122)
plt.imshow (flagMatrix)
plt.title ( "결과 1 이미지 \ nRound = {} \ n 직업 = {}."형식 (roundForLoop, numOfClass))
plt.show ()

반복 :
1 클러스터는 각 픽셀을 통해 반복 프로세스이며, 각 요소의 각 화소 사이의 차이를 계산하는 단계 나타내는 keyValueList, 차의 작은 절대 값임을 클래스의 화소에 가까운 . 가장 가까운 클래스에서이 요소로 돌아 명령했다.
2. 모든 화소를 통과 후, 화소는 각각의 카테고리에 대한 평균 값을 요구하고 keyValueList에 대응하는 요소의 값을 갱신하고, 반복을 완료. 로우의 요소 화상의 각 화소의 평균 등급을 나타낸다 높음 길이 분류 번호 keyValueList 저장 공간.
3, 결국 동일한 사이즈의 플래그 행렬의 화상을 얻는 것, 상기 매트릭스의 각 요소는 원래 카테고리의 화소 위치에 대응한다.
4, 플래그 출력 행렬은 클러스터링에 의해 얻어진 분류 결과를 얻을 수있다.

추천

출처blog.51cto.com/14421854/2415763