【数字图像处理matlab】(HSI变换融合算法)

输入一张高分辨率的全色影像HR,一张低分辨率的多光谱影像MS,采用HSI变换融合算法实现影像融合,其中RGB与HSI影像的相互转换调用自定义函数RGB2HSI(),HSI2RGB(),函数具体代码为。

RGB2HSI()

function Image1=RGB2HSI(image)
%调用代码-------------------------------------------
%imageR=imread('animal.jpg');
%RGB2HSI(image);
%--------------------------------------------------image=im2double(image);
%从三维数组中提取三幅分量图像
R1=image(:,:,1);
G1=image(:,:,2);
B1=image(:,:,3);
I=(R1+G1+B1)/3;        %亮度分量,范围[0,1]
m=min(min(R1,G1),B1);
S=1-3*m./(R1+G1+B1);    %饱和度分量,范围[0,1]
theta=acos(((R1-G1)+(R1-B1))./(2*((R1-G1).^2+((R1-B1).*(G1-B1))).^(1/2))); %弧度
H=theta;   %色度分量,以角度表示,范围是[0,1](弧度除以2*pi后)
if B1>G1H=2*pi-theta;
end
if S==0H=0;
end
H=H/(2*pi);
Image1=cat(3,H,S,I);
subplot(1,2,1),imshow(image);
title('RGB原图')
subplot(1,2,2),imshow(Image1);
title('转换后的HSI图像')
end

HSI2RGB()

function rgb= HSI2RGB(hsi)
H = hsi(:, :, 1) * 2 * pi;
S = hsi(:, :, 2);
I = hsi(:, :, 3); R = zeros(size(hsi, 1), size(hsi, 2));
G = zeros(size(hsi, 1), size(hsi, 2));
B = zeros(size(hsi, 1), size(hsi, 2)); idx = find( (0 <= H) & (H < 2*pi/3));
B(idx) = I(idx) .* (1 - S(idx));
R(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx)) ./ cos(pi/3 - H(idx)));
G(idx) = 3*I(idx) - (R(idx) + B(idx)); idx = find( (2*pi/3 <= H) & (H < 4*pi/3) );
R(idx) = I(idx) .* (1 - S(idx));
G(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 2*pi/3) ./ cos(pi - H(idx)));
B(idx) = 3*I(idx) - (R(idx) + G(idx)); idx = find( (4*pi/3 <= H) & (H <= 2*pi));
G(idx) = I(idx) .* (1 - S(idx));
B(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 4*pi/3) ./cos(5*pi/3 - H(idx)));
R(idx) = 3*I(idx) - (G(idx) + B(idx)); rgb = cat(3, R, G, B);
rgb = max(min(rgb, 1), 0);
figure,
%subplot(1,2,1),
imshow(rgb);title('转换回的RGB图像')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H1 = hsi(:, :, 1) * 2 * pi;
S1 = hsi(:, :, 2);
I1 = hsi(:, :, 3);
R1 = zeros(size(hsi, 1), size(hsi, 2));
G1= zeros(size(hsi, 1), size(hsi, 2));
B1 = zeros(size(hsi, 1), size(hsi, 2));
if 0<=H1<2*pi/3;B1=I1.*(1-S1);R1=I1.*(1+(S1.*cos(H1)./cos(pi/3-H1)));G1=3.*I1-(B1+R1);
elseif((2*pi/3<=H1)&&(H1<4*pi/3));R1=I1.*(1-S1);G1=I1.*(1+(S1.*cos(H1-2*pi/3)./cos(pi-H1)));B1=3.*I1-(R1+G1);
else((4*pi/3<=H1)&(H1<2*pi));G1=I1.*(1-S1);B1=I1.*(1+(S1.*cos(H1-4*pi/3)./cos(10*pi/6-H1)));R1=3.*I1-(G1+B1);
end
r=cat(3,R1,G1,B1);
r=max(min(r,1),0);
subplot(1,2,2),imshow(r);
title('转换回的RGB图像') end

基于HSI变换的融合算法:

function F=HSI_melt(HR,MS)
%调用代码------------------------------------------------------
%Image1=imread('HR.jpg');Image2=imread('MS.jpg');
%HSI_melt(Image1,Image2);
%--------------------------------------------------------------
HR=im2double(HR); [row,column,~]=size(HR);
MS=im2double(MS);
MS1=RGB2HSI(MS);     %多光谱影像转换至HSI空间
H=MS1(:,:,1); S=MS1(:,:,2); I=MS1(:,:,3);
MAX2=max(max(I));MIN2=min(min(I));
MAX1=max(max(HR));MIN1=min(min(HR));
%高分辨率影像拉与亮度分量一致,假设变换前[MIN1,MAX2]后的亮度值为[MIN2,MAX2]
A=(MAX2-MIN2)/(MAX1-MIN1);B=(MAX1*MIN2-MIN1*MAX2)/(MAX1-MIN1);
HR1=zeros(row,column);
for i=1:rowfor j=1:columnHR1(i,j)=HR(i,j)*A+B;end
endMS2=cat(3,H,S,HR1);
Image=HSI2RGB(MS2);
figure,imshow(Image);
title('基于HSI变换的影像融合结果');
end

测试:


【数字图像处理matlab】(HSI变换融合算法)相关推荐

  1. 数字图像处理MATLAB学习笔记(五)

    数字图像处理MATLAB学习笔记(五) Color Image Processing 1 Color Image Representation in MATLAB 这里不多说了,彩色图片在计算机中以R ...

  2. 加权平均法融合图像matlab,基于MATLAB的图像融合算法

    内容介绍 原文档由会员 小甜甜 发布 基于MATLAB的图像融合算法 1.9万字 34页 摘要 图像融合能够将不同类型传感器获取的同一对象的图像数据进行空间配准.并且采用一定的算法将各图像数据所含的信 ...

  3. 《数字图像处理 MATLAB版》学习笔记

    学习教材:<数字图像处理 MATLAB版>(第二版) 冈萨雷斯 学习过程中的图片代码和及我收集的一些关于数字图像处理的其他学习资料,需要的可以评论留下邮箱(需要购买专栏),加油 文章目录 ...

  4. 数字图像处理MATLAB学习笔记(一)

    数字图像处理MATLAB学习笔记(一) 灰度转换与空间滤波 本节主要使用Matlab语言进行灰度转换与空间滤波的使用 并对相关数学原理进行总结 1. Intensity Transformer Fun ...

  5. 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.数字图像处理MATLAB版冈萨雷斯+中文高清版 2.数字图像处理MATLAB版冈萨雷斯随书源码 1.数字图像处 ...

  6. Win8Metro(C#)数字图像处理--2.31灰度拉伸算法

    Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法  [函数名称] 灰度拉伸函数GrayStretchProces ...

  7. 数字图像处理--傅里叶(逆)变换

    数字图像处理–傅里叶(逆)变换 主要内容 (1)对一副图像进行缩放,显示原始图像和缩放后的图像,分别对其进行傅里叶变换,显示变换后结果: (2)对一副图像进行旋转,显示原始图像和旋转后的图像,分别对其 ...

  8. [数字图像处理Matlab]任选一幅灰度图,自行编写程序,完成直方图均衡化。鼠鼠的数字图像处理实验要求:不能用MATLAB自带的histeq函数实现直方图均衡化

    数学理论前提:见数字图像处理(第三版) 李俊山等编著  p50-53 1.利用imhist函数统计像素点个数 Im = imread("C:\Users\鼠鼠\Desktop\数字图像处理m ...

  9. 图像处理----入门资料,Matlab r2019最新版,r2008a,《数字图像处理》冈萨雷斯 第三版 《数字图像处理 Matlab 版》

    研究生想研究的方向是图像处理,现在离开学还有四个月,希望能稍微入门吧.同时也希望通过博客的形式记录一下学习的进度,学习的心情.目前学习两周,安装了基本的软件,收集书籍,学习了灰度变换,空间滤波,频率滤 ...

最新文章

  1. MS SQL SERVER2005 分页存储过程
  2. @AutoWired和@Resource注解异同分析
  3. smartform 打印预览时转PDF查看
  4. mysql拒绝访问root用户_设置mysql的root用户允许远程登录
  5. 系统开发基础:UML相关知识笔记
  6. ubuntu 12下的apache+php+mysql_老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
  7. mysql 不用缓存_mysql有自己的缓存机制,为什么还要用redis和memcac? 爱问知识人
  8. Deformable-DETR的学习笔记
  9. webpack配置时:Plugin/Preset files are not allowed to export objects, only functions.
  10. 1.1 Mysql安装包 windows
  11. cas入门之:cas 4 如何以http形式发布
  12. 留学Essay挂科后如何进行补救?
  13. 什么是顶尖的互联网产品经理?
  14. 那些年微信开发过的鸡肋功能,及其带给我们的思考
  15. Eclipse Neon EGit Integration gives Exception 401 Authorization Required
  16. python 中文转拼音原理_Python中文转拼音
  17. 关于Ecshop小京东,手机管理后台,增加楼层右边分类不显示的问题
  18. 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)之间的转换
  19. 如何免费将caj转换成PDF,支持批量且不用安装软件
  20. win11正式版如何退回win10 windows11正式版退回win10的步骤方法

热门文章

  1. LUA脚本(游戏辅助) 点击函数 区域单点多点着色
  2. js 声明——有无var的区别
  3. 蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)
  4. 云计算导论第二章习题总结
  5. underscoreJs中pluck函数的源码解析
  6. 知了Excel教你vlookup反向查询,就是这么简单
  7. 开封二级分销系统开发如何划分等级?
  8. 如何进行用户画像分析
  9. 【优化算法】简述灰狼优化算法(GWO)原理
  10. NTFS磁盘读写工具Mounty 1.9 Mac免费版