文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

图像聚类的python实现

2023-01-31 01:47

关注

因为之后的项目要用到影像聚类,之前一直是用ENVI实现,现在想学下python。
学习的这一篇:小项目聚类

import cv2
import matplotlib.pyplot as plt
import numpy as np

imPath = 'C:\Users\lp\Desktop\photo.jpg'

origin = cv2.imread(imPath)

origin = cv2.cvtColor(origin, cv2.COLOR_BGR2GRAY)

h, w = origin.shape
print("原始图像大小为 :{}*{}".format(h, w))

alpha = int(input("\n请输入缩放系数 : "))

newH = int(h / alpha)
newW = int(w / alpha)
print("\n缩放后图像大小 : {}*{}".format(newH, newW))
origin = cv2.resize(origin, (newW, newH))

numOfClass = int(input("\n色彩分类数 : "))

roundForLoop = int(input("\n定义最大迭代次数 : "))
print()

print("————开始聚类————")

valueArange = origin.max() - origin.min()
keyValueList = [] # 用来存储numOfClass个中心点的值

for i in range(1, numOfClass + 1):
keyValueList.append(valueArange / numOfClass * i / 2)

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

for r in range(roundForLoop):

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(origin)
plt.title("Origin Image")

plt.subplot(122)
plt.imshow(flagMatrix)
plt.title("Result1 Image\nRound = {}\nclass = {}".format(roundForLoop, numOfClass))
plt.show()

迭代过程:
1、聚类的迭代过程就是遍历每个像素点,并且将每个像素点分别与keyValueList的每个元素做差,这个差的绝对值越小,说明该像素点离该类越近。遂将该元素归到离其最近的类。
2、遍历完所有的像素点后,对每一类的像素点求其平均值,并以该值更新对应的keyValueList中的元素,并完成一轮迭代。keyValueList为一个长度为分类数的存储空间,其元素从低到高代表了图像像素各个类的平均值。
3、最终会获得一个与原图大小相同的flag矩阵,矩阵的每个元素对应原图中像素所在类别。
4、将该flag矩阵输出,则得到聚类得到的分类结果。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯