MATLAB图像处理与应用
一、遥感图像的读写
相关函数:multibandread
与multibandwrite
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);
另:参考博客
二、遥感图像增强
- 直方图均衡化
- 指数变换
- 对数变换
- 线性拉伸
- 直方图均衡化
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('融合后');
四、图像处理常用函数
- 读写图像文件
imread 、imwrite 、imfinfo 、multibandread 、multibandwrite
- 图像的显示
imshow 、colorbar 、figure
- 图像的变换
fft2二维傅里叶变换
ifft2二维傅里叶反变换
fft2可以进行卷积,然后用conv2校验
- 模拟噪声生成函数和预定义滤波器
imnoise 、fspecial
- 图像的增强
imhist直方图
histeq直方图均衡化
log对数变换
filter2基于卷积的图像滤波函数
conv2线性滤波
medfilt2中值滤波
锐化:Sobel算子、拉普拉斯算子
- 图像的分析
P=impixel(I)%交互式获取图像像素值
P=impixel(I,c,r)%指定点坐标像素值,c,r为行坐标和列坐标
im2uint8,im2double和uint8,double
MATLAB图像处理与应用相关推荐
- matlab图像处理命令(二)
转自:http://blog.163.com/crazyzcs@126/blog/static/1297420502010229104452729/ (非原处) 图像增强 1. 直方图均衡化的 Mat ...
- matlab图像处理命令(一)
转自:http://blog.csdn.net/langyuewu/archive/2009/05/02/4144120.aspx(非原处) 1.applylut 功能: 在二进制图像中利用looku ...
- Atitit MATLAB 图像处理attilax总结
Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...
- matlab图像处理——平滑滤波
平滑滤波--matlab图像处理 平滑滤波的目的是消除或尽量减少噪声,改善图像的质量.假设加性噪声是随机独立分布,这样利用图像像素领域的平均或加权平均即可有效地抑制噪声干扰.从信号分析的观点来看,图像 ...
- matlab图像相加例子,MATLAB图像处理例子
MATLAB图像处理例子 clc;clear all;close all; a = imread( railway_05.jpg ); b = rgb2gray(a); c = im2bw(b,240 ...
- Matlab图像处理创新实践-实验4【综合设计大实验——GUI综合设计】
Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...
- Matlab图像处理创新实践-实验3【图像锐化】
Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...
- Matlab图像处理创新实践-实验2【图像滤波基础(2)】
Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...
- Matlab图像处理创新实践-实验1【图像滤波基础(1)】
Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...
- 《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构
本节书摘来自异步社区<MATLAB图像处理375例>一书中的第1章,第1.8节,作者:MATLAB技术联盟著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.8 ...
最新文章
- 熟人Dubbo 系列1-Dubbo什么
- 终于找到了一篇文章!通俗地讲解面向对象的工作原理
- PAT_B_1090_C++(25分)
- python安装多久_python安装与使用
- 福建省高等学校非计算机考试大纲,福建省高等学校计算机应用水平等级考试三级(偏软)考试大纲...
- LINUX 下安装git
- oracle临时表空间占用率过高,ORACLE临时表空间太大,如何处理?
- c语言获取pmbus之pec值
- MATLAB矩阵计算大全
- java将jsp页面表格导出excel表格数据_JSP 导出Excel表格的实例
- 马哥python课堂笔记_马哥教育PYTHON相关基础 笔记
- Mac电脑无法从Photoshop 2020作为插件访问DeNoise AI的解决办法
- 手机壁纸尺寸android,APP设计手抄:5点安卓手机尺寸分辨率知识
- “大数据”、“机器学习”、“深度学习”到底是什么?
- 微信开发者工具关联gitee
- 你可能不知道的GDB命令
- 对极验geetest滑块验证码图片还原算法的研究
- RDP协议简介与通讯数据加密等级及设置说明
- [转] 全国测绘事业单位(转)
- Configuration Manager 2012 R2基础知识
热门文章
- php文本框的属性,在PHP中,为文本框设置“name”属性的方法是() 答案:为不同文本框表单元素分别设置不同的“name”属性值...
- ubuntu服务器网络管理(解决无法restart命令重启网卡,网卡冲突等)
- photoshop色彩混合模式理论基础教程
- 基于LABVIEW和MATLAB的联合编程图像降噪
- 奋斗吧,程序员——第三十五章 莫愁前路无知己,天下谁人不识君
- 【SolidWorks】给表面粗糙度绘制多条引线
- GitHub发布2018年度报告,哪个国家的程序员最话痨?美国位居榜首
- 企业如何构建高效的用户标签体系?
- 机器学习与分布式机器学习_我如何学习机器学习
- 大白话带你认识JVM