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

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

✅作者简介:热爱科研的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电子书和数学建模资料


相关文章
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
18小时前
|
资源调度 算法 块存储
m基于遗传优化的LDPC码OMS译码算法最优偏移参数计算和误码率matlab仿真
MATLAB2022a仿真实现了遗传优化的LDPC码OSD译码算法,通过自动搜索最佳偏移参数ΔΔ以提升纠错性能。该算法结合了低密度奇偶校验码和有序统计译码理论,利用遗传算法进行全局优化,避免手动调整,提高译码效率。核心程序包括编码、调制、AWGN信道模拟及软输入软输出译码等步骤,通过仿真曲线展示了不同SNR下的误码率性能。
7 1
|
19小时前
|
机器学习/深度学习 算法 API
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
6 0
|
2天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】在使用K-means聚类算法时,如何选择K的值?
【5月更文挑战第11天】【机器学习】在使用K-means聚类算法时,如何选择K的值?
|
4天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
4天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
13 1
|
4天前
|
算法 关系型数据库 C语言
卡尔曼滤波简介+ 算法实现代码(转)
卡尔曼滤波简介+ 算法实现代码(转)
16 4
|
5天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
5天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章