【图像分割】基于PCA结合模糊聚类算法FCM实现SAR图像分割附matlab代码

news2024/9/23 1:23:45

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

​合成孔径雷达(Synthetic Aperture Radar,SAR)是一种高分辨率相干成像雷达.与红外和可见光遥感技术相比,SAR具有全天时,全天候工作的优点,因此广泛应用于军事和国民经济邻域.SAR图像分割是SAR图像处理的重要环节,是影响SAR自动解译性能的关键技术之一. 模糊c均值(FCM)聚类算法是模糊聚类分析中的经典算法,比较适合处理图像中的不确定性问题,已经广泛应用于图像分割中.

⛄ 部分代码

clear;

clc;

close all;

addpath('./utils');

addpath('./liblinear');

% im1   = imread('./pic/san_1.bmp');

% im2   = imread('./pic/san_2.bmp');

% im_gt = imread('./pic/san_gt.bmp');

% im1   = imread('./pic/bern_1.bmp');

% im2   = imread('./pic/bern_2.bmp');

% im_gt = imread('./pic/bern_gt.bmp');

% fprintf(' ... ... read image file finished !!! !!!\n\n');

% im1   = imread('./pic/san_1.bmp');

% im2   = imread('./pic/san_2.bmp');

% im_gt = imread('./pic/san_gt.bmp');

% im1   = imread('E:\图像处理文件\变化检测3\daima文献\GaoFeng\SAR_Change_Detection_CWNN-master\pic\Sulzberger1_1.bmp');

% im2   = imread('E:\图像处理文件\变化检测3\daima文献\GaoFeng\SAR_Change_Detection_CWNN-master\pic\Sulzberger1_2.bmp');

% im_gt = imread('E:\图像处理文件\变化检测3\daima文献\GaoFeng\SAR_Change_Detection_CWNN-master\pic\Sulzberger1_gt.bmp');

% im1   = imread('.\Ottawa-SAR\im1.bmp');

% im2   = imread('.\Ottawa-SAR\im2.bmp');

%

% im_gt = imread('.\Ottawa-SAR\im3.bmp');

% im1   = imread('.\Yellow River I-SAR\im1.bmp');

% im2   = imread('.\Yellow River I-SAR\im2.bmp');

% im_gt = imread('.\Yellow River I-SAR\rf.bmp');

im1   = imread('data\im1.bmp');

im2   = imread('data\im2.bmp');

 %291*306

im_gt = imread('data\rf.bmp');

%%去噪

% im1=YZmedian(im1,20,9);%阈值分解中值滤波 im1=YZmedian(im1,1.6,9)

% figure,imshow(im1);

% title('时相1滤波后');

% im2=YZmedian(im2,20,9);%阈值分解中值滤波

% figure,imshow(im2);

% title('时相2滤波后');

im1  = double(im1(:,:,1));  

im2  = double(im2(:,:,1)); 

im_gt = double(im_gt(:,:,1));

% im1   = double(im1);  

% im2   = double(im2); 

% im_gt = double(im_gt(:,:,1));

% % 求差分图像,得到差分图像后进行了滤波预处理 

% fprintf('... ... compute the difference image ... ...\n');

im_di = di_gen(im1, im2);%对数比值法 

% im_di = getPCAFusion(im1,im2);

% figure,imshow(im_di);

%邻域比值法

% k_n=3;

% im_di = nr(im1, im2, k_n);

% im_di = max(im_di(:))-im_di;

% im_di = nr_enhance( im_di );

% % figure,imshow(im_di);

% im_di=load('DI_fusion.mat');

% im_di=struct2array(load('DI_fusion.mat'));

% setting of variables

% 这些参数来自 GaborTLC 的一些默认参数

PatSize =9;

% HW =18;% 10 15

HW = 21;

GaborH = HW;

GaborW = HW;

sigma =1.9*pi;%5.2  3.2 3.1

Kmax =1.9*pi;%5.2-1.8

f = sqrt(2);

flag = 1;

scale = 5;

orientation = 8;

% sigma = 2.8*pi;

% Kmax = 2.0*pi;

% f = sqrt(2);

% flag = 1;

% scale = 5;

% orientation = 8;

V = 0:1:(scale-1);

U = 0:1:(orientation-1);

% [Ylen,Xlen] = size(im_di); %%%%%%

[Ylen,Xlen] = size(im_di);

% the total number of pixels for the difference image

pixel_sum = Ylen*Xlen;

% the total number of self-similar Gabor filters

subgraph_sum = scale*orientation;

% Initialization

GaImout_MAGNITUDE = cell(scale,orientation);          % magnitude

% Step 2): Feature extraction==============================================

% Gabor wavelet transform

for s = 1:scale,

    for n = 1:orientation,

        GaImout_MAGNITUDE{s,n} = zeros(Ylen,Xlen);

        [Gr,Gi] = GaborKernelWave(GaborH, GaborW, U(n), V(s), Kmax, f, sigma, orientation, flag);

        % Gr: The real part of the Gabor kernels

        % Gi: The imaginary part of the Gabor kernels

        Regabout = conv2(im_di,double(Gr),'same');%im_di与double(Gr) 卷积, same:返回与 A 大小相同的卷积的中心部分

        Imgabout = conv2(im_di,double(Gi),'same');

%         Regabout = conv2(im_di,double(Gr),'same'); %im_di与double(Gr) 卷积, same:返回与 A 大小相同的卷积的中心部分

%         Imgabout = conv2(im_di,double(Gi),'same');

        % Magnitude 大小

        GaImout_MAGNITUDE{s,n} = sqrt(Imgabout.*Imgabout + Regabout.*Regabout);    

    end;

end;

clear GaborH GaborW sigma;

clear Gi Gr HW Kmax;

clear Imgabout Regabout;

clear U V f flag;

% acquire the feature vector of each pixel for the difference image

% 1): all amplitudes at different scales and orientations​

% 获取差分图像每个像素的特征向量% 1) : 不同尺度和方向的所有幅度

pixel_vector_1 = zeros(pixel_sum,subgraph_sum);

k = 1;

for s = 1:scale

    for n = 1:orientation

        temp_gaimout_1 = zeros(Ylen,Xlen);

        temp_gaimout_1 = GaImout_MAGNITUDE{s,n};

        pixel_vector_1(:,k) = reshape(temp_gaimout_1',pixel_sum,1);

        k = k + 1;

    end

end

clear k n s GaImout_MAGNITUDE subgraph_sum;

% 2): maximum amplitudes for all orientations at different scales

% 不同尺度上所有方向的最大振幅

pixel_vectorr_2 = zeros(pixel_sum,scale);

for s = 1:scale

    temp_gaimout_2 = zeros(pixel_sum,orientation);

    temp_gaimout_2 = pixel_vector_1(:,(s-1)*orientation+1:s*orientation);

    pixel_vector_2(:,s) = max(temp_gaimout_2,[],2);

end

% % Gabor1=GaborM(im1);

% % Gabor2=GaborM(im2);

clear scale temp_gaimout_1 temp_gaimout_2 pixel_vector_1;

clear s pixel_sum orientation;

% 求差分图像,得到差分图像后进行了滤波预处理 

fprintf('... ... compute the difference image ... ...\n');

% pixel_vector_2=GaborM(im_di1);

% Step 3): Hierarchical clustering==========================

fprintf('... ... hclustering begin ... ...\n');

im_lab = HClustering(pixel_vector_2, im_di);

figure,imshow(im_lab);

⛄ 运行结果

⛄ 参考文献

[1]武斌. 模糊聚类在遥感图像分割中的应用研究[D]. 安徽农业大学.

[1]汪柯陆. 基于模糊c均值聚类的SAR图像分割算法研究. Diss. 西安电子科技大学.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

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

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

相关文章

[附源码]计算机毕业设计疫情网课管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

代码随想录刷题Day53 | 1143. 最长公共子序列 | 1035. 不相交的线 | 53. 最大子数组和

代码随想录刷题Day53 | 1143. 最长公共子序列 | 1035. 不相交的线 | 53. 最大子数组和 1143. 最长公共子序列 题目: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字…

创建Hibernate项目与实现一个例子(idea版)

文章目录创建Hibernate项目一、前提准备二、创建项目三、实现一个例子创建Hibernate项目 一、前提准备 准备Hibernate开发必需的jar包。准备数据库的驱动jar包。准备junit.jar包。 这些包你可以去官网下载,也可以下载我已下载好的(本人目前使用的)。 https://pan…

【机器学习】评价指标 : 准确率,查准率与查全率

引言 在机器学习中,有几个评价指标,今天专门来介绍一下。之前的学习中主要是看模型,学算法,突然有一天发现,机器学习中的一些基本概念还是有点模糊,导致不知道如何综合评价模型的好坏。 这篇文章主要介绍如…

HTML5期末考核大作业:基于Html+Css+javascript的网页制作(化妆品公司网站制作)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【强化学习论文合集 | 2018年合集】一. ICML-2018 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

我的数学学习回忆录——一个数学爱好者的反思(二)

早点关注我,精彩不错过!上回说到我在数学学习过程中走的种种弯路,相关内容请戳:我的数学学习回忆录——一个数学爱好者的反思(一)那在这样坎坷的旅程中,有没有给我带来意外惊喜,是不…

C++中的类型转换

文章目录一、隐式类型转换二、显式类型转换三、c风格的类型转换一、隐式类型转换 隐式类型转换,顾名思义,就是没有明显的声明要进行类型转换,隐式类型转换有可能造成数据精度的丢失,所以通常所做的类型转换都是从size小的数据到si…

哈夫曼编码(Huffman coding)

哈夫曼编码哈夫曼编码简介发展历史思想示例不足哈夫曼编码 简介 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概…

[附源码]JAVA毕业设计计算机在线学习管理系统-(系统+LW)

[附源码]JAVA毕业设计计算机在线学习管理系统-(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

实现自定义Spring Boot Starter

实现自定义Spring Boot Starter一、原理二、实战1 自定义 Spring Boot Starter1.1 添加maven依赖1.2 属性类AuthorProperties1.3 自动配置类AuthorAutoConfiguration1.4 业务逻辑AuthorServer1.5 spring.factories2 测试自定义的 Spring Boot Starter2.1 新建module或者新建工程…

什么软件能识别软件?学会这几个软件就可以了

在日常学习或工作中,我们经常会因为各种各样的原因,导致资料无法记全。比如上课的时候老师讲课速度过快、或者开会时需要整理的资料太多,我们做不到一心二用,边听边记。你们遇到类似情况的时候,都是怎么解决的呢&#…

0x02. Spring Boot 3 之SpringBoot 版本升级最佳实践指南

Spring Boot 3 之SpringBoot低版本升级最佳实践0x01 前言0x02 升级Spring Boot2.1 从Spring Boot 1.5.x 升级到Spring Boot 2.x2.1.1 依赖检查2.1.2 检查自定义配置2.1.3 检查系统需要2.1.4 升级到Spring Boot 2.x2.1.5 配置属性迁移2.2 从Spring Boot 2.7.x 升级到Spring Boot…

概率统计·样本及抽样分布【随机样本、抽样分布】

总体与个体 总体:试验的全部可能的观察值称为总体 个体:总体中每个可能的观察值称为个体 总体期望样本平均期望 总体方差/n样本平均方差 随机样本 X1,X2……Xn相互独立(x1,x2……xn是观察值)&#xff0…

[附源码]计算机毕业设计springboot疫苗及注射管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

STC 51单片机52——自发自收串行通信

#include <reg52.h> unsigned char ch0; /* 初始化函数 */ void uart_init() { TMOD0x20; //T1为方式2 TL10xfd; TH10xfd; //波特率为9600的计数初值 SCON0x50; //串口工作在方式1。允许接收 …

[附源码]Python计算机毕业设计Django基于Java的日用品在线电商平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

五问补盲(一) | 激光雷达补盲,视场多大算大?

作者 | 爱LiDAR的小飞哥 编辑 | 王博“大&#xff01;超大&#xff01;更大&#xff01;” 最近&#xff0c;补盲激光雷达市场热闹非凡&#xff0c;各家在宣传产品的视场角时竭尽全力&#xff0c;毫不吝啬形容词。 回归到实际需求&#xff0c;多大的视场角够用&#xff1f;超大…

西门子触摸屏上电显示初始画面几秒后,自动切换到下一个画面的具体方法

西门子触摸屏上电显示初始画面几秒后,自动切换到下一个画面的具体方法 例如:在启动画面停留10秒后,切换到其他画面。 具体实现方法可参考以下内容: 如下图所示,新建一个项目,在画面中添加2个画面, 如下图所示,在变量中添加一个内部变量tag1,用于控制画面的切换, …

es查询响应结果中获取某些字段的值

有时候使用es查询出的结果包含多个字段&#xff0c;如果数据中仅仅包含几个字段时&#xff0c;我们是很容易挑出自己需要的字段值&#xff0c;但是如果数据中包含几十或者几百甚至更多时&#xff0c;尤其是数据中嵌套好多层时&#xff0c;不容易直接挑取出需要的值&#xff0c;…