一、遥感图像的读写

相关函数:multibandreadmultibandwrite
1.遥感图像头文件读取

fid=fopen('OLI2017_sub.hdr','r');
info=fread(fid,'char=>char');%字符型或字符型
info=info';
display(info);%%fprintf(info);
fclose(fid);

2.读取列数、行数、波段数、数据类型

  • 列数
ac=strfind(info,'samples = ');       %查找字符串返回位置的套路
bc=length('samples = ');
cc=strfind(info,'lines ');
samples=[];
for i=ac+bc:cc-1samples=[samples,info(i)];
end
samples=str2num(samples);
  • 行数
ar=strfind(info,'lines   = ');
br=length('lines   = ');
cr=strfind(info,'bands ');
lines=[];
for i=ar+br:cr-1lines=[lines,info(i)];
end
lines=str2num(lines);
  • 波段数
ab=strfind(info,'bands   = ');
bb=length('bands   = ');
cb=strfind(info,'data type');%换汤不换药,总之就是查找搜寻
bands=[];
for i=ab+bb:cb-1bands=[bands,info(i)];
end
bands=str2num(bands);
  • 数据类型同理,其中的data type
%case=1 对应ENVI中的数据类型为Byte,对应MATLAB中的数据类型为unit8
%case=2 对应ENVI中的数据类型为Integer,对应MATLAB中的数据类型为unit16
%case=12 对应ENVI中的数据类型为Unsigned Int,对应MATLAB中的数据类型为unit16
%case=3 对应ENVI中的数据类型为Long Integer,对应MATLAB中的数据类型为unit32
%case=13 对应ENVI中的数据类型为Unsigned Long,对应MATLAB中的数据类型为unit32
%case=4 对应ENVI中的数据类型为Floating Point,对应MATLAB中的数据类型为float32
%case=5 对应ENVI中的数据类型为Double Precision,对应MATLAB中的数据类型为double
%otherwise 除以上几种常见的数据类型之外的数据类型视为无效的数据类型
  • 数据格式同上

3.遥感图像数据读取与显示

%读取图像
data=multibandread('OLI2017_sub.dat',[lines,samples,bands],'double',0,'bil','ieee-le');%有问题啊。。。把[lines,samples,bands]参数值调小点就可以了
% % 错误使用 multibandread (line 118)
% % 文件太小,无法包含指定的数据。请检查大小、偏移和精度参数
data=double(data);
%数值转化为0~255的整型用于显示
data_unit8=data;
for k=1:bandsmin_val=min(data(:,:,k));max_val=max(data(:,:,k));for i=1:linesfor j=1:samplesdata_unit8(i,j,k)=unit8((data_unit8(i,j,k)-min_val)/(max_val-min_val)*255;endend
end
%单波段遥感图像显示
im1=data_unit8(:,:,k);
figure;imshow(im1);
%真彩色显示
im3=data_unit8(:,:,6:8);
figure;imshow(im3);
%假彩色显示
i3m=data_unit8(:,:,5:7);
figure;inshow(i3m);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%另一种方法,用ENVI将影像转化为.tif的格式,然后
I=imread('sub_01.tif');
im1=I(:,:,3);
imshow(im1);

另:参考博客

二、遥感图像增强

  1. 直方图均衡化
  2. 指数变换
  3. 对数变换
  4. 线性拉伸
  • 直方图均衡化
I=imread('sub_01.tif');
im1=I(:,:,1);
[r, c, b]=size(im1);
%转化为8bit图像,以1波段为例
min_val=min(min(im1));
max_val=max(max(im1));
for i=1:rfor j=1:cim1(i,j)=255*(im1(i,j)-min_val)/(max_val-min_val);end
end
im1=uint8(im1);
figure(1);
subplot(2,2,1),imshow(im1),title('原图');
subplot(2,2,2),imhist(im1),title('原图直方图');
eq=histeq(im1);
subplot(2,2,3),imshow(eq),title('直方图均衡化');
subplot(2,2,4),imhist(eq),title('直方图均衡化后的');
  • 指数变换
I=imread('sub_01.tif');
im1=I(:,:,1);
im0=im1;
[r, c, b]=size(im1);
Gamma=0.4;
C=1;
im1=C*(double(im1).^Gamma);     %double类型运算
%归一化
min_val=min(min(im1));
max_val=max(max(im1));
for i=1:rfor j=1:cim1(i,j)=255*(im1(i,j)-min_val)/(max_val-min_val);end
end
im1=uint8(im1);
figure(1);
subplot(2,2,1),imshow(im0),title('原图');
subplot(2,2,2),imhist(im0),title('原图直方图');
subplot(2,2,3),imshow(im1),xlabel('\gamma=0.4');
subplot(2,2,4),imhist(im1),title('直方图均衡化后的');
  • 对数变换
I=imread('sub_01.tif');
im1=double(I(:,:,1));
[r, c, b]=size(im1);
C=1.0;
v1=10;v2=100;v3=200;
f1=C*log2(1+v1*im1)/log2(v1+1);     %double类型运算
f2=C*log2(1+v2*im1)/log2(v2+1);
f3=C*log2(1+v3*im1)/log2(v3+1);
%归一化
min_val1=min(min(f1));
max_val1=max(max(f1));
min_val2=min(min(f2));
max_val2=max(max(f2));
min_val3=min(min(f3));
max_val3=max(max(f3));
for i=1:rfor j=1:cf1(i,j)=255*(f1(i,j)-min_val1)/(max_val1-min_val1);f2(i,j)=255*(f2(i,j)-min_val2)/(max_val2-min_val2);f3(i,j)=255*(f3(i,j)-min_val3)/(max_val3-min_val3);end
end
f1=uint8(f1);
f2=uint8(f2);
f3=uint8(f3);
figure(1);
subplot(2,2,1),imshow(I(:,:,1)),title('原图');
subplot(2,2,2),imshow(f1),title('v=10');
subplot(2,2,3),imshow(f2),xlabel('v=100');
subplot(2,2,4),imshow(f3),title('v=200');
  • 线性拉伸
I=imread('sub_01.tif');
im1=I(:,:,1);
[r, c, b]=size(im1);
%遥感图像读入的是uint16的需要转化为uint8然后再显示
imshow(im1);title('原图像');
mid=mean(mean(im1));
%横轴
fa=20;fb=120;
%纵轴
ga=100;gb=255;
dst_img=uint8(zeros(r,c));
im1=double(im1);
%三段斜率
k1=ga/fa;
k2=(gb-ga)/(fb-fa);
k3=(255-gb)/(255-fb);
for i=1:rfor j=1:cif im1(i,j)<=fadst_img(i,j)=k1*g(i,j);elseif fa<im1(i,j)&&im1(i,j)<=fbdst_img(i,j)=k2*(g(i,j)-fa)+ga;elsedst_img(i,j)=k3*(im1(i,j)-fb)+gb;endend
end
dis_img=uint8(dst_img);
J=dst_img;
figure(2);imshow(J);title('线性变换图像');

三、遥感图像融合

%%1.小波变换融合
X1=data(:,:,6);
min_val=min(min(X1));
max_val=max(max(X1));
for i=1:linesfor j=1:samplesX1(i,j)=255*(X1(i,j)-min_val)/(max_val-min_val);end
end
X1=double(X1)/256;
figure;imshow(X1),title('高分辨率');
axis square;
X2=data(:,:,10);
min_val=min(min(X2));
max_val=max(max(X2));
for i=1:linesfor j=1:samplesX2(i,j)=255*(X2(i,j)-min_val)/(max_val-min_val);end
end
X2=double(X2)/256;
figure;imshow(X2),title('低分辨率');
axis square;
[c1,s1]=wavedec2(X1,2,'syms4');%将x1进行2维,使用'syms'进行变换
sizec1=size(c1);
for i=1:sizec1(2)c1(i)=1.2*c1(i);    %将分解后的值扩大1.2倍
end
[c2,s2]=wavedec2(X2,2,'syms4');%将x1进行2维,使用'syms'进行变换
c=(c1+c2)/2;
s1=(s1+s2)/2;
xx=waverec2(c,s,'sym4');    %进行重构
figure;imshow(xx),title('融合后的遥感图像');
axis square;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%2.利用自带融合函数实现融合
X1=data(:,:,6);
min_val=min(min(X1));
max_val=max(max(X1));
for i=1:linesfor j=1:samplesX1(i,j)=255*(X1(i,j)-min_val)/(max_val-min_val);end
end
X2=data(:,:,10);
min_val=min(min(X2));
max_val=max(max(X2));
for i=1:linesfor j=1:samplesX2(i,j)=255*(X2(i,j)-min_val)/(max_val-min_val);end
end
XFUS=wfusimg(X1,X2,'sym4',5,'max','max');
min_val=min(min(XFUS));
max_val=max(max(XFUS));
for i=1:linesfor j=1:samplesXFUS(i,j)=(XFUS(i,j)-min_val)/(max_val-min_val)*255;end
end
%显示融合后图像
X1=uint8(X1);
X2=uint8(X2);
XFUS=uint8(XFUS);
subplot(1,3,1),imshow(X1),axis square,title('高分辨率');
subplot(1,3,2),imshow(X2),axis square,title('低分辨率');
subplot(1,3,3),imshow(XFUS),axis square,title('融合后');

四、图像处理常用函数

  1. 读写图像文件

imread 、imwrite 、imfinfo 、multibandread 、multibandwrite

  1. 图像的显示

imshow 、colorbar 、figure

  1. 图像的变换

fft2二维傅里叶变换
ifft2二维傅里叶反变换
fft2可以进行卷积,然后用conv2校验

  1. 模拟噪声生成函数和预定义滤波器

imnoise 、fspecial

  1. 图像的增强

imhist直方图
histeq直方图均衡化
log对数变换
filter2基于卷积的图像滤波函数
conv2线性滤波
medfilt2中值滤波
锐化:Sobel算子、拉普拉斯算子

  1. 图像的分析

P=impixel(I)%交互式获取图像像素值
P=impixel(I,c,r)%指定点坐标像素值,c,r为行坐标和列坐标

im2uint8,im2double和uint8,double

MATLAB图像处理与应用相关推荐

  1. matlab图像处理命令(二)

    转自:http://blog.163.com/crazyzcs@126/blog/static/1297420502010229104452729/ (非原处) 图像增强 1. 直方图均衡化的 Mat ...

  2. matlab图像处理命令(一)

    转自:http://blog.csdn.net/langyuewu/archive/2009/05/02/4144120.aspx(非原处) 1.applylut 功能: 在二进制图像中利用looku ...

  3. Atitit MATLAB 图像处理attilax总结

    Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...

  4. matlab图像处理——平滑滤波

    平滑滤波--matlab图像处理 平滑滤波的目的是消除或尽量减少噪声,改善图像的质量.假设加性噪声是随机独立分布,这样利用图像像素领域的平均或加权平均即可有效地抑制噪声干扰.从信号分析的观点来看,图像 ...

  5. matlab图像相加例子,MATLAB图像处理例子

    MATLAB图像处理例子 clc;clear all;close all; a = imread( railway_05.jpg ); b = rgb2gray(a); c = im2bw(b,240 ...

  6. Matlab图像处理创新实践-实验4【综合设计大实验——GUI综合设计】

    Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...

  7. Matlab图像处理创新实践-实验3【图像锐化】

    Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...

  8. Matlab图像处理创新实践-实验2【图像滤波基础(2)】

    Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...

  9. Matlab图像处理创新实践-实验1【图像滤波基础(1)】

    Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...

  10. 《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构

    本节书摘来自异步社区<MATLAB图像处理375例>一书中的第1章,第1.8节,作者:MATLAB技术联盟著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.8 ...

最新文章

  1. 熟人Dubbo 系列1-Dubbo什么
  2. 终于找到了一篇文章!通俗地讲解面向对象的工作原理
  3. PAT_B_1090_C++(25分)
  4. python安装多久_python安装与使用
  5. 福建省高等学校非计算机考试大纲,福建省高等学校计算机应用水平等级考试三级(偏软)考试大纲...
  6. LINUX 下安装git
  7. oracle临时表空间占用率过高,ORACLE临时表空间太大,如何处理?
  8. c语言获取pmbus之pec值
  9. MATLAB矩阵计算大全
  10. java将jsp页面表格导出excel表格数据_JSP 导出Excel表格的实例
  11. 马哥python课堂笔记_马哥教育PYTHON相关基础 笔记
  12. Mac电脑无法从Photoshop 2020作为插件访问DeNoise AI的解决办法
  13. 手机壁纸尺寸android,APP设计手抄:5点安卓手机尺寸分辨率知识
  14. “大数据”、“机器学习”、“深度学习”到底是什么?
  15. 微信开发者工具关联gitee
  16. 你可能不知道的GDB命令
  17. 对极验geetest滑块验证码图片还原算法的研究
  18. RDP协议简介与通讯数据加密等级及设置说明
  19. [转] 全国测绘事业单位(转)
  20. Configuration Manager 2012 R2基础知识

热门文章

  1. php文本框的属性,在PHP中,为文本框设置“name”属性的方法是() 答案:为不同文本框表单元素分别设置不同的“name”属性值...
  2. ubuntu服务器网络管理(解决无法restart命令重启网卡,网卡冲突等)
  3. photoshop色彩混合模式理论基础教程
  4. 基于LABVIEW和MATLAB的联合编程图像降噪
  5. 奋斗吧,程序员——第三十五章 莫愁前路无知己,天下谁人不识君
  6. 【SolidWorks】给表面粗糙度绘制多条引线
  7. GitHub发布2018年度报告,哪个国家的程序员最话痨?美国位居榜首
  8. 企业如何构建高效的用户标签体系?
  9. 机器学习与分布式机器学习_我如何学习机器学习
  10. 大白话带你认识JVM