使用K-means方法对遥感图像进行聚类

import cv2
import numpy as np
np.set_printoptions(threshold=np.inf)
from sklearn.cluster import KMeans

img0 = cv2.imread(r'paviau_area_16bit2.tif', flags=1)

img0 = img0[1:, 1:, 0] # 获取B通道图片,B通道更能区别叶片色彩;且将不必要部分截除,便于处理。
cv2.imshow("imagin0", img0)
cv2.waitKey()
cv2.destroyWindow("imagin0")

r, c = img0.shape

feature = []
for i in range(r):
    for j in range(c):
        feature.append([0, 0, img0[i, j]])
feature = np.array(feature)
label = KMeans(4).fit_predict(feature) #4类
bool1 = label == 0
bool2 = label == 1
bool3 = label == 2
bool4 = label == 3

img1 = img0.copy()
img1 = img1.ravel()
img1[bool1] = 10
img1[bool2] = 70
img1[bool3] = 130
img1[bool4] = 200

img1 = img1.reshape(r, c)
cv2.imshow("imagin1", img1)
cv2.waitKey()
cv2.destroyWindow("imagin1")  # 关闭指定窗口
k = np.array([[1, 1], [1, 1]])  # kernal
# 进行各类形态学的变化,参数说明:src传入的图片,op进行变化的方式,kernel表示方框的大小
img2 = cv2.morphologyEx(img1, cv2.MORPH_CLOSE, k, iterations=1)  # 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作
img2 = cv2.morphologyEx(img2, cv2.MORPH_OPEN, k, iterations=1)  # 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作
cv2.imshow("imagin2", img2)
cv2.waitKey()
cv2.imwrite('paviau_area_16bit2_kmeans.tif', img2)  # 写入图片
cv2.destroyWindow("imagin2")

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空中旋转篮球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值