비디오 프로젝트는 클러스터링을 사용하기 전후 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, 플래그 출력 행렬은 클러스터링에 의해 얻어진 분류 결과를 얻을 수있다.