当前位置: 首页 > news >正文

利用MATLAB绘制箱线图—箱线图在高光谱图像处理中的应用

利用MATLAB绘制箱线图

  • 一、箱线图在高光谱图像处理中的应用
  • 二、箱线图具体MATLAB代码分享
  • 三、参考文献

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

一、箱线图在高光谱图像处理中的应用

箱线图也称箱须图、箱形图、盒图,用于反映一组或多组连续型定量数据分布的中心位置和散布范围。箱形图包含数学统计量,不仅能够分析不同类别数据各层次水平差异,还能揭示数据间离散程度、异常值、分布差异等等。

目前已经在异常检测,目标探测,红外小目标检测、分类等多个方向上有广泛的应用,具体箱线图的含义,读者可以百度,或者查看第三部分的相关参考文献,此处不再赘述。

二、箱线图具体MATLAB代码分享

来,咱们直接上代码,硬核分享,具体如下:

%% 箱线图(背景分离)程序
% Compiled by Zephyr Hou on 2019-01-23
%% 加载数据
clc;clear;close all;

% load('Gulfport_Res.mat')
% load('SpecTIR_Res.mat')
load('SanDiego_Res.mat')

[rows,cols] = size(hsi_gt);
% figure(1);imshow(hsi_gt,[]);title('原始影像gt ');
%% 探测结果进行归一化(0-1)
max1 = max(max(R1));min1 = min(min(R1));
R1 = (R1-min1)/(max1-min1);

max2 = max(max(R2));min2 = min(min(R2));
R2 = (R2-min2)/(max2-min2);

% max3 = max(max(R3));min3 = min(min(R3));
% R3 = (R3-min3)/(max3-min3);

max4 = max(max(R4));min4 = min(min(R4));
R4 = (R4-min4)/(max4-min4);

max5 = max(max(R5));min5 = min(min(R5));
R5 = (R5-min5)/(max5-min5);

max6 = max(max(R6));min6 = min(min(R6));
R6 = (R6-min6)/(max6-min6);

max7 = max(max(R7));min7 = min(min(R7));
R7 = (R7-min7)/(max7-min7);

%% 二维转换为一维
label_value = reshape(hsi_gt,1,rows*cols);
R1_value = reshape(R1,1,rows*cols);
R2_value = reshape(R2,1,rows*cols);
% R3_value = reshape(R3,1,rows*cols);
R4_value = reshape(R4,1,rows*cols);
R5_value = reshape(R5,1,rows*cols);
R6_value = reshape(R6,1,rows*cols);
R7_value = reshape(R7,1,rows*cols);

%%
ind_tar = find(label_value == 1);
ind_bac = find(label_value == 0);
% targ back为列向量
num_targ = length(ind_tar);
num_back = length(ind_bac);
num_meth = 6;   % 异常探测方法种类


targ1 = R1_value(ind_tar);
targ2 = R2_value(ind_tar);
% targ3 = R3_value(ind_tar);
targ4 = R4_value(ind_tar);
targ5 = R5_value(ind_tar);
targ6 = R6_value(ind_tar);
targ7 = R7_value(ind_tar);


back1 = R1_value(ind_bac);
back2 = R2_value(ind_bac);
% back3 = R3_value(ind_bac);
back4 = R4_value(ind_bac);
back5 = R5_value(ind_bac);
back6 = R6_value(ind_bac);
back7 = R7_value(ind_bac);


X_targ = [targ1;targ2;targ4;targ5;targ6;targ7]';
X_back = [back1;back2;back4;back5;back6;back7]';
X = [X_targ(:);X_back(:)];
X = X(:);
g1_targ = [ones(1,num_targ); 2*ones(1, num_targ); 3*ones(1, num_targ);4*ones(1, num_targ);...
    5*ones(1, num_targ);6*ones(1, num_targ)]'; 
g1_back = [ones(1, num_back); 2*ones(1, num_back); 3*ones(1, num_back);4*ones(1, num_back);...
    5*ones(1, num_back);6*ones(1, num_back)]'; 
g1 = [g1_targ(:); g1_back(:)];
g1 = g1(:);
g2 = [ones(num_meth*num_targ,1);2*ones(num_meth*num_back,1)];
g2 = g2(:);
positions = [[1:num_meth],[1:num_meth]+0.3];
%%
figure(2);
bh=boxplot(X, {g2,g1} ,'whisker',10000,'colorgroup',g2, 'symbol','.','outliersize',4,'widths',0.2,'positions',positions);
set(bh,'LineWidth',1.7)
ylabel('Detection test statistic range');


% grid on
% set(gca,'YLim',[0,0.5],'gridLineStyle', '-.');

% ylim([0,0.0065])  % 用于y轴的坐标轴显示范围的控制

Xtick_pos = [1:num_meth]+0.15;% 确定label显示的位置
Xtick_label  ={'GRX','LRX','RPCA','CRD','CRBPSW\_LS','CRBPSW\_CR'};
set(gca,'XTickLabel',Xtick_label, 'XTick',Xtick_pos);
% xtickangle(15)% 旋转标签角度

% 显示图例
h=findobj(gca,'tag','Outliers');
delete(h) 
legend(findobj(gca,'Tag','Box'),'背景','异常')


%% 最大值与最小值(箱须至高与至低点:whisker 为0-100%)
p_targ = prctile(X_targ,[0 100]);
p_back = prctile(X_back,[0 100]);
% p_targ = prctile(X_targ,[10 90]);
% p_back = prctile(X_back,[10 90]);
p = [];
for i = 1:num_meth
    p = [p,p_targ(:,i),p_back(:,i)];
end

% 箱子的上边缘与下边缘 (异常、背景区域10% 与 90% 统计)
q_targ = quantile(X_targ,[0.1 0.9]);  
q_back = quantile(X_back,[0.1 0.9]);  
% q_targ = quantile(X_targ,[0.09 0.81]);  
% q_back = quantile(X_back,[0.09 0.81]);  
q = [];
for i = 1:num_meth
    q = [q,q_targ(:,i),q_back(:,i)];
end

h = flipud(findobj(gca,'Tag','Box'));
for j = 1:length(h)
    q10 = q(1,j);
    q90 = q(2,j);
    set(h(j),'YData',[q10 q90 q90 q10 q10]);
end

% Replace upper end y value of whisker
h = flipud(findobj(gca,'Tag','Upper Whisker'));
for j=1:length(h);
%     ydata = get(h(j),'YData');
%     ydata(2) = p(2,j);
%     set(h(j),'YData',ydata);
    set(h(j),'YData',[q(2,j) p(2,j)]);
end

% Replace all y values of adjacent value
h = flipud(findobj(gca,'Tag','Upper Adjacent Value'));
for j=1:length(h);
%     ydata = get(h(j),'YData');
%     ydata(:) = p(2,j);
    set(h(j),'YData',[p(2,j) p(2,j)]);
end

% Replace lower end y value of whisker
h = flipud(findobj(gca,'Tag','Lower Whisker'));
for j=1:length(h);
%     ydata = get(h(j),'YData');
%     ydata(1) = p(1,j);
    set(h(j),'YData',[q(1,j) p(1,j)]);
end

% Replace all y values of adjacent value
h = flipud(findobj(gca,'Tag','Lower Adjacent Value'));
for j=1:length(h);
%     ydata = get(h(j),'YData');
%     ydata(:) = p(1,j);
    set(h(j),'YData',[p(1,j) p(1,j)]);
end

具体效果如下,各位科研小伙伴可以根据该代码进行相应更改。
在这里插入图片描述

三、参考文献

关于每个箱子含义,以及更详细的解释,读者可以查阅下面两篇原文,里面有更为详细的解释。

[1] Zengfu Hou, Wei Li, Ran Tao, Pengge Ma, and Weihua Shi. Collaborative Representation with Background Purification and Saliency Weight for Hyperspectral Anomaly Detection[J]. Science China Information Sciences, 2022 Jan, 65(1):1-12. doi: https://doi.org/10.1007/s11432-020-2915-2.
[2] Jun Liu, Zengfu Hou, Wei Li, Ran Tao, Pengge Ma, Danilo Orlando, and Hongbin Li. Multipixel Anomaly Detection With an Unknown Pattern for Hyperspectral Imagery[J]. IEEE Transactions on Neural Networks and Learning Systems, 2021, doi: 10.1109/TNNLS.2021.3071026.

相关文章:

  • ERPS协议学习笔记
  • node.js基于微信小程序的校园失物招领系统毕业设计源码072343
  • 1.4 Elasticsearch索引的mappings映射
  • ams启动过程以及App的启动过程
  • Java毕业设计-新闻段子发布管理系统
  • maven依赖冲突导致tomcat启动失败
  • Mysql基础(四)——约束与表关系
  • 聚苯乙烯微球表面原位接枝含糖聚合物/pH响应性磁性聚苯乙烯基多孔微球制备方法
  • Curator使用手册
  • x86汇编_MUL/IMUL乘法指令_笔记52
  • CSP-J1 CSP-S1第1轮 初赛 如何拿到好成绩(60分及以上)
  • Package | 解决Could NOT find GLEW (missing: GLEW_INCLUDE_DIRS GLEW_LIBRARIES)
  • Maven的配置与安装
  • 阿里云 OSS
  • MacOS 12 Monterey根目录无法创建目录
  • Android 控件背景颜色处理
  • Consul Config 使用Git做版本控制的实现
  • java8-模拟hadoop
  • JavaScript 基础知识 - 入门篇(一)
  • java取消线程实例
  • leetcode388. Longest Absolute File Path
  • PHP的Ev教程三(Periodic watcher)
  • Redux 中间件分析
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 关于使用markdown的方法(引自CSDN教程)
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 小试R空间处理新库sf
  • 一份游戏开发学习路线
  • 一些关于Rust在2019年的思考
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (算法)求1到1亿间的质数或素数
  • (一)Linux+Windows下安装ffmpeg
  • (一)UDP基本编程步骤
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)JAVA中的堆栈
  • (转)关于pipe()的详细解析
  • .net Signalr 使用笔记
  • .net 后台导出excel ,word
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • ?.的用法
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C/C++随笔] char与unsigned char区别
  • [ffmpeg] x264 配置参数解析
  • [Google Guava] 2.1-不可变集合