基于K-means和FCM算法的合成纹理图像及SAR图像的分割

🎀个人主页: https://zhangxiaoshu.blog.csdn.net
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️,如有错误敬请指正!
💕未来很长,值得我们全力奔赴更美好的生活!

前言

合成纹理图像和SAR(Synthetic Aperture Radar,合成孔径雷达)图像的分割任务在遥感图像处理和计算机视觉领域中具有重要的应用价值。例如对于环境监测、资源管理、灾害应对、国防安全等方面。本文主要介绍基于K均值和模糊C均值算法的合成纹理图像及SAR图像的分割小实例。


文章目录

  • 前言
  • 介绍
    • 1. 合成纹理图像
    • 2. 分割任务
  • 一、K均值算法以及模糊C均值算法
    • 1. K均值算法
    • 2. 模糊C均值算法
  • 二、K均值算法以及模糊C均值算法分割实验
    • 1. K均值算法分割实验
    • 2. 模糊C均值算法分割实验


介绍

1. 合成纹理图像

  1. 合成纹理图像通常是通过人工合成或利用纹理合成算法生成的图像。它们具有多样的纹理特征,用于模拟真实场景中的各种地物表面,如土地覆盖、植被类型等。合成纹理图像在图像分割任务中可以用作训练数据,用于模型的训练和验证。
    SAR图像:

  2. 合成孔径雷达(SAR)是一种主动遥感技术,利用雷达系统发射脉冲信号,接收反射回来的信号,并利用回波数据生成图像。SAR图像通常具有独特的特征,例如对地物形态、材质和湿度等的敏感性,因此在土地利用、资源管理、环境监测等领域具有广泛的应用。SAR图像分割任务的目的是将图像中的不同地物区域进行有效地分割和识别。

2. 分割任务

图像分割任务旨在将图像中的像素划分为不同的类别或区域,使得每个区域具有相似的特征或语义含义。在合成纹理图像和SAR图像的分割任务中,目标是将图像中的不同地物或地物类型进行分割,以实现对地物的识别和定量分析。

  1. 合成纹理图像分割任务:旨在将合成纹理图像中的不同地物区域(如建筑、水体、植被等)进行分割,从而实现对地物的识别和分类。

  2. SAR图像分割任务:旨在将SAR图像中的不同地物区域(如建筑、道路、植被等)进行分割,以实现对地物的识别和监测。

这些分割任务的结果可以为地理信息系统(GIS)、环境监测、城市规划等应用提供重要的数据支持,有助于对地表覆盖类型、土地利用情况、环境变化等进行定量分析和监测。因此,合成纹理图像和SAR图像的分割任务在地学、地理信息科学、遥感技术和环境科学等领域具有广泛的应用前景。

一、K均值算法以及模糊C均值算法

1. K均值算法

K均值(K-means)算法是一种经典的聚类算法,用于将数据集分成K个不同的组(簇),使得每个数据点都属于与其最近的簇中心所对应的簇。K均值算法的步骤如下:
在这里插入图片描述

  • 初始化:随机选择K个初始的簇中心(centroid),可以是数据集中的随机样本或者随机生成的点。

  • 分配:对于每个数据点,计算其与K个簇中心的距离,并将其分配给距离最近的簇中心所对应的簇。

  • 更新:对于每个簇,计算其所有数据点的均值,并将该均值作为新的簇中心。

  • 重复:重复步骤2和步骤3,直到簇中心不再发生变化或者达到最大迭代次数。

  • 收敛:当簇中心不再发生变化时,算法收敛,得到最终的簇划分结果。

2. 模糊C均值算法

模糊C均值(FCM,Fuzzy C-means)算法是K均值算法的一种扩展,它允许数据点属于多个簇的可能性,而不是强制将每个数据点分配给一个唯一的簇。这使得FCM算法对于某些数据集的聚类更加灵活和鲁棒。

算法步骤:

  • 初始化:随机初始化K个簇中心,并为每个数据点分配一个隶属度(membership degree)向量,表示数据点属于每个簇的可能性。

  • 计算簇中心:对于每个簇,计算其簇中心,作为该簇中所有数据点的加权平均值,其中权重由数据点与簇中心的距离以及隶属度来决定。

  • 更新隶属度:根据数据点与各个簇中心之间的距离以及指定的模糊参数m,更新每个数据点的隶属度向量。

  • 检查停止条件:如果隶属度向量的变化小于预先指定的阈值,或者达到最大迭代次数,则停止迭代;否则返回步骤2。

  • 收敛:当满足停止条件时,算法收敛,得到最终的簇中心和每个数据点的隶属度向量。

二、K均值算法以及模糊C均值算法分割实验

1. K均值算法分割实验

算法代码如下所示:

import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('D:/VSCode/Task_python/lab/homework/Mosaic1_new.tif') 
#img = cv2.imread('D:/VSCode/Task_python/lab/homework/river_2.bmp')
data = img.reshape((-1,3))
data = np.float32(data)#定义中心 (type,max_iter,epsilon)
criteria = (cv2.TERM_CRITERIA_EPS +cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
#设置标签
flags = cv2.KMEANS_RANDOM_CENTERS
#K-Means聚类 聚集成2类
compactness, labels2, centers2 = cv2.kmeans(data, 2, None, criteria, 10, flags)#图像转换回uint8二维类型
centers2 = np.uint8(centers2)
res = centers2[labels2.flatten()]
dst2 = res.reshape((img.shape))
#图像转换为gray显示
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst2 = cv2.cvtColor(dst2, cv2.COLOR_BGR2GRAY)
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#显示图像
titles = [u'原始图像', u'kmeans聚类图像 K=2'] 
images = [img, dst2] for i in range(2): plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'), plt.title(titles[i]) plt.xticks([]),plt.yticks([]) 
plt.savefig('D:/VSCode/Task_python/lab/homework/kmeans_1.jpg')
plt.show()

结果如下图所示:
在这里插入图片描述
在这里插入图片描述

2. 模糊C均值算法分割实验

算法代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
import time
import cv2
star = time.time()  # 计时
#img = cv2.imread('D:/VSCode/Task_python/lab/homework/Mosaic1_new.tif')  # 读取图片信息,存储在一个三维数组中
img = cv2.imread('D:/VSCode/Task_python/lab/homework/river_2.bmp')
row = img.shape[0]
col = img.shape[1]
plt.figure(1)
plt.figure(figsize=(9, 7))
plt.subplot(221)
plt.title('原始图像')
plt.imshow(img)def fcm(data, threshold, k, m):# 0.初始化data = data.reshape(-1, 3)cluster_center = np.zeros([k, 3])  # 簇心distance = np.zeros([k, row*col])  # 欧氏距离times = 0  # 迭代次数goal_j = np.array([])  # 迭代终止条件:目标函数goal_u = np.array([])  # 迭代终止条件:隶属度矩阵元素最大变化量# 1.初始化Uu = np.random.dirichlet(np.ones(k), row*col).T  # 形状(k, col*rol),任意一列元素和=1#  for s in range(50):while 1:times += 1print('循环:', times)# 2.簇心updatefor i in range(k):cluster_center[i] = np.sum((np.tile(u[i] ** m, (3, 1))).T * data, axis=0) / np.sum(u[i] ** m)# 3.U update# 3.1欧拉距离for i in range(k):distance[i] = np.sqrt(np.sum((data - np.tile(cluster_center[i], (row * col, 1))) ** 2, axis=1))# 3.2目标函数goal_j = np.append(goal_j, np.sum((u**m)*distance**2))# 3.3 更新隶属度矩阵oldu = u.copy()  # 记录上一次隶属度矩阵u = np.zeros([k, row * col])for i in range(k):for j in range(k):u[i] += (distance[i] / distance[j]) ** (2 / (m - 1))u[i] = 1/u[i]goal_u = np.append(goal_u, np.max(u - oldu))  # 隶属度元素最大变化量print('隶属度元素最大变化量', np.max(u - oldu), '目标函数', np.sum((u**m)*distance**2))# 4.判断:隶属度矩阵元素最大变化量是否小于阈值if np.max(u - oldu) <= threshold:breakreturn u, goal_j, goal_uif __name__ == '__main__':img_show, goal1_j, goal2_u = fcm(img, 1e-09, 2, 2)img_show = np.argmax(img_show, axis=0)#img_show = img_show.reshape((256,256,1))# plt.figure(2)plt.subplot(223)plt.plot(goal1_j)plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.title('目标函数变化曲线')plt.xlabel('迭代次数')plt.ylabel('目标函数')# plt.figure(3)plt.subplot(224)plt.plot(goal2_u)plt.title('隶属度矩阵相邻两次迭代的元素最大变化量变化曲线')plt.xlabel('迭代次数')plt.ylabel('隶属度矩阵相邻两次迭代的元素最大变化量')# plt.figure(1)plt.subplot(222)plt.imshow(img_show.reshape([row, col]),cmap="gray")plt.title('FCM聚类图像(cluster_center=2)')end = time.time()print('用时:', end - star)plt.savefig('D:/VSCode/Task_python/lab/homework/FCM_2.jpg')plt.show()

结果如下图所示:

在这里插入图片描述
在这里插入图片描述


文中图片大多来自论文和网络,如有侵权,联系删除,文中有不对的地方欢迎指正、补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2978649.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用Docker搭建本地Nexus私有仓库

0-1开始Java语言编程之路 一、Ubuntu下Java语言环境搭建 二、Ubuntu下Docker环境安装 三、使用Docker搭建本地Nexus Maven私有仓库 四、Ubuntu下使用VisualStudioCode进行Java开发 你需要Nexus Java应用编译构建的一种主流方式就是通过Maven, Maven可以很方便的管理Java应用的…

wsl2 中docker安装完毕后无法正常启动

wsl2 中docker安装完毕后无法正常启动 1、背景2、目标3、环境4、原因4、操作5.1、查看配置5.2、 切换配置5.3、启动docker5.4、验证docker 1、背景 在win10中安装wsl2体验linux操作系统&#xff0c;按照docker官网步骤安装&#xff0c;安装完毕后面提示 $ docker ps Cannot co…

每日一题 — 二分查找

704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 朴素二分查找模板&#xff1a; while(.......){//防止溢出int mid left(right - left)/2;if(........){right mid-1;}else if(......){left mid1;}else{return mid;}} 代码&#xff1a; public int search(int[] num…

【前端】项目中如何快速构建vue脚手架

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、vue脚手架介绍二、构建vue脚手架三、总结 前言 随着开发语言的普及&#xff0c;越来越多的开发框架需要搭建ue脚手架来进行敏捷开发&#xff0c;本文主要介…

软考高项(已通过,E类人才)-学习笔记材料梳理汇总

软考高项&#xff0c;即软考高级信息系统项目管理师&#xff0c;全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试中的高级水平测试。适用于从事计算机应用技术、软件、网络、信息系统和信息服务等领域的专业人员&#xff0c;以及各级企业管理人员和从事项目…

MySQL学习笔记5——函数和索引

函数和索引 一、函数1、数学函数2、字符串函数3、条件判断函数 二、索引1、索引是什么2、单字段索引3、组合索引4、总结 一、函数 MySQL提供了很多功能强大&#xff0c;而且使用起来非常方便的函数&#xff0c;包括数学函数、字符串处理函数和条件判断函数等。 1、数学函数 …

Spring Cloud面试篇

面试篇-nacos面试题 1. springboot常见组件 注册中心组件&#xff1a;Eureka、Nacos 负载均衡组件&#xff1a;Ribbon 远程调用组件&#xff1a;OpenFeign 网关组件&#xff1a;Zuul、Gateway 服务保护组件&#xff1a;Hystrix、Sentinel 服务配置管理组件&#xff1a;SpringCl…

大模型的研究新方向:混合专家模型(MoE)

大模型的发展已经到了一个瓶颈期,包括被业内所诟病的罔顾事实而产生的“幻觉”问题、深层次的逻辑理解能力、数学推理能力等,想要解决这些问题就不得不继续增加模型的复杂度。随着不同应用场景的实际需求,大模型的参数会变得越来越大,复杂性和规模不断的增加,尤其是在多模…

18.基础乐理-音阶是什么、有什么用

音阶&#xff1a; 将调式中的音&#xff0c;从以主音开始到以主音结束&#xff0c;由低到高&#xff08;叫做上行&#xff08;xing&#xff09;&#xff09;&#xff0c;或由高到低&#xff08;叫做下行&#xff08;xing&#xff09;&#xff09;&#xff0c;以阶梯状排列起来&…

Bingbong的回文路径

Here 利用回文串&#xff0c;从左往右与从右往左的hash值相同来判断从左往右&#xff0c;例&#xff1a;从右往左&#xff0c;例&#xff1a;由于在树上&#xff0c;考虑建两颗树&#xff0c;一颗根为最高位&#xff08;up&#xff09;&#xff0c;一棵根为最低位&#xff08;…

Rust 使用结构体组织相关联的数据

目录 结构体的定义和实例化 使用字段初始化简写语法使用结构体更新语法从其他实例创建实例使用没有命名字段的元组结构体来创建不同的类型没有任何字段的类单元结构体结构体示例程序 通过派生 trait 增加实用功能方法语法 定义方法带有更多参数的方法关联函数多个 impl 块本文有…

大厂常见算法50题-反转链表

专栏持续更新50道算法题&#xff0c;都是大厂高频算法题&#xff0c;建议关注。 文章目录 解法参考链接题目解法一 双指针解法二 递归解法三 妖魔化的双指针总结 解法参考链接 题目 解法一 双指针 定义两个指针&#xff1a; pre 和 cur。pre 在前 cur 在后。每次让 pre的 nex…

Day4 商品管理

Day4 商品管理 这里会总结构建项目过程中遇到的问题&#xff0c;以及一些个人思考&#xff01;&#xff01; 学习方法&#xff1a; 1 github源码 文档 官网 2 内容复现 &#xff0c;实际操作 项目源码同步更新到github 欢迎大家star~ 后期会更新并上传前端项目 编写品牌服务 …

在线预约订房酒店小程序源码系统 带完整的安装代码包以及=安装部署教程

传统的酒店预订方式往往依赖于电话、邮件或者到店咨询&#xff0c;这种方式不仅效率低下&#xff0c;而且容易造成信息不准确、沟通不畅等问题。随着智能手机的普及和移动互联网的发展&#xff0c;用户对于随时随地、方便快捷地进行酒店预订的需求日益增强。小编给大家分享一款…

[MySQL]运算符

1. 算术运算符 (1). 算术运算符 : , -, *, / 或 DIV, % 或MOD. (2). 例 : (3). 注 : DUAL是伪表.可以看到4/2结果为小数&#xff0c;并不会截断小数部分.(可能与其他语言不同&#xff0c;比如java中&#xff0c;两个操作数如果是整数&#xff0c;则计算得到的也是整数&…

羊大师:夏季羊奶的好处有哪些?

夏季羊奶的好处主要包括以下几点 1.增强免疫力&#xff1a;羊奶中的钙元素丰富&#xff0c;能有效为身体补充营养物质&#xff0c;增强自身的免疫能力。羊奶还富含上皮细胞生长因子&#xff08;EGF&#xff09;&#xff0c;对人体鼻腔、咽喉、血管、肠胃等黏膜有良好的修复作用…

Qt 跨平台开发的一丢丢总结

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字&#xff1a; Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题&#xff0c;缘由有以下几个&#xff0c; 首先第一个&#xff0c;我们目前开发…

几种比Serv-u更好满足企业的替代工具方案

很多目前企业面临的挑战是如何在保障数据安全的同时&#xff0c;提高文件传输的效率。传统的FTP服务器&#xff0c;如Serv-U&#xff0c;虽然长期服务于文件共享与传输&#xff0c;但在新兴需求面前显得力不从心。 于是企业开始寻求更先进的解决方案以应对跨地域、大容量的文件…

Vue 3中的ref和toRefs:响应式状态管理利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【图说】VMware Ubuntu22.04 详细安装教程

前言 无论是从事 Linux 开发工作&#xff0c;还是希望电脑运行双系统&#xff0c;VMware 虚拟机都是我们日常工作不可或缺的工具。本章将会重点介绍 VMware 安装流程&#xff0c;以及在 VMware 上如何运行、使用 Ubuntu22.04 系统。 一、VMware 下载安装 1.1 VMware 官网下载…