光电图像处理相关程序.docx
- 文档编号:7071640
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:47
- 大小:39.95KB
光电图像处理相关程序.docx
《光电图像处理相关程序.docx》由会员分享,可在线阅读,更多相关《光电图像处理相关程序.docx(47页珍藏版)》请在冰豆网上搜索。
光电图像处理相关程序
%图像读入
%[X,MAP]=imread(‘filename.format’)
%X为数据矩阵;map为颜色映像矩阵,3列若干行0-1之间的双精度浮点数
[X,map]=imread('peacock24b.jpg');%将图像格式文件读入
image(X);%显示图像
colormap(map)%设置索引图像的颜色表
%读取图像信息
%info=imfinfo('filename.format')
Info=imfinfo('kq24b.jpg')
%图像显示Imshow
%imshow(I,n)显示灰度级为n的图像,n缺省为256。
%imshow(I,[low,high])以灰度范围[low,high]显示图像%imshow(I,[]),灰度范围为默认值的方式显示图像
%imshow(X,MAP)显示索引图像
%imshow(I,jet(256))
%colorbar%显示颜色表
%imshow(RGB)%显示真彩色图像。
%subimage%多图显示多个调色板的图像。
%代码示例
I=imread('peacock24b.jpg');
J=imread('fish24b.jpg');
[K,map]=imread('treesind.tif');
subplot(3,3,1),imshow(I);colorbar;title('imshow显示真彩色图')
subplot(3,3,2),imshow(I,[135,150]);colorbar;title('显示灰度为135-150')
subplot(3,3,3),imshow(I,spring(256));colorbar;title('显示spring伪彩色')
subplot(3,3,4),imshow(J);colorbar;title('imshow显示真彩色图')
subplot(3,3,5),imshow(J,lines(256));colorbar;title('显示lines伪彩色')
subplot(3,3,6),subimage(J);colorbar;title('subimage显示原图')
subplot(3,3,7),imshow(K,[120,180]);colorbar;title('显示灰度120-180')
subplot(3,3,8),imshow(K,map);colorbar;title('imshow显示索引图')
subplot(3,3,9),subimage(K,map);colorbar;title('subimage显示索引图')
%图像保存imwrite函数
%imwrite(I,'filename','format')-保存无调色板的图像
%imwrite(X,MAP,'filename','format')-保存有调色板的图像
%imwrite(I,'filename.format')-文件名中含格式
%imwrite(I,'parameters','value')-指定保存参数
%文件格式:
bmp、jpg、pcx、tif。
I=imread('peacock24b.jpg');
imwrite(I,'peacock24b.tif','tif')
[J,map]=imread('peacock24b.tif');
subplot(1,2,1);subimage(I);title('jpg格式原图')
subplot(1,2,2);subimage(J);title('tif格式图')
%图像类型转换
转换类型
转换函数
用处
①
真彩图像→索引图像
X=dither(RGB,map)
节省存储空间,假彩色
②
索引图像→真彩图像
RGB=ind2rgb(X,map)
便于图像处理
③
真彩图像→灰度图像
I=rgb2gray(RGB)
得到亮度分布
④
真彩图像→二值图像
BW=im2bw(RGB,level)
阈值处理,筛选
⑤
索引图像→灰度图像
I=ind2gray(X,map)
Newmap=rgb2gray(map)
得到亮度分布
⑥
灰度图像→索引图像
[X,map]=gray2ind(I,n),
X=grayslice(I,n)
X=grayslice(I,v)
伪彩色处理
⑦
灰度图像→二值图像
BW=dither(I)
BW=im2bw(I,level)
阈值处理,筛选
⑧
索引图像→二值图像
BW=im2bw(X,map,level)
阈值处理,筛选
⑨
数据矩阵→灰度图像
I=mat2gray(A,[max,min])
I=mat2gray(A)
产生图像
%1.真彩图像→索引图像
%X=dither(RGB,map)%通过颜色抖动实现转换,RGB可以是double或uint8类型,X超过256色则为double类型,否则输出为uint8型
%2.索引图像→真彩图像
%RGB=ind2rgb(X,map)%X可以是double或uint8类型,RGB为double类型
%3真彩图像→灰度图像
%I=rgb2gray(RGB)%RGB可以是double或uint8类型,I类型同RGB
%peacockrgb-ind
clf,rgbpeacock=imread('peacock24b.tif');map=jet(256);peacockind=dither(rgbpeacock,map);
subplot(3,2,1);subimage(rgbpeacock);title('孔雀真彩图')
subplot(3,2,2);subimage(peacockind,map);title('孔雀索引图')
%treesind-rgb
[treesind,map]=imread('treesind.tif');rgbtrees=ind2rgb(treesind,map);
subplot(3,2,3);subimage(treesind,map);title('树索引图')
subplot(3,2,4);subimage(rgbtrees);title('树真彩图')
%fishrgb-gray
rgbfish=imread('fish24b.jpg');fishgray=rgb2gray(rgbfish);
subplot(3,2,5);subimage(rgbfish);title('鱼真彩图')
subplot(3,2,6);subimage(fishgray);title('鱼灰度图')
%4真彩图像→二值图像
%BW=im2bw(RGB,level)%设置亮度阈值level,将真彩图像转换为二值图像,BW为uint8型
%5索引图像→灰度图像
%
(1)%I=ind2gray(X,map)%X可以是double或uint8类型,map为double类型
%
(2)%Newmap=rgb2gray(map)%将彩色调色板map转换为灰度调色板Newmap
%6灰度图像→索引图像
%
(1)%[X,map]=gray2ind(I,n)%将灰度图像转换为灰度级为n的索引图像X,n的默认值为64;
%
(2)%X=grayslice(I,n)%将灰度图像I均匀量化为n个等级,然后转换为伪彩色图像X;
%(3)%X=grayslice(I,v)%按指定的阈值矢量v(其中每个元素在0和1之间)对图像I进行阈值划分,然后转换成%索引图像,I可以是double类型、uint8类型和uint16类型,map的行不大于256,则X为uint类型,否则为double类型
%真彩图像→二值图像
clf,peacock24brgb=imread('peacock24b.tif');
peacock24bbw=im2bw(peacock24brgb,0.5);peacock24bgray=rgb2gray(peacock24brgb);
subplot(3,3,1);subimage(peacock24brgb);title('孔雀真彩图')
subplot(3,3,2);subimage(peacock24bgray);title('孔雀灰度图')
subplot(3,3,3);subimage(peacock24bbw);title('孔雀二值图')
%索引图像→灰度图像
loadtrees;I=ind2gray(X,map);Newmap=rgb2gray(map);
subplot(3,3,4);subimage(X,map);title('索引图')
subplot(3,3,5);subimage(I);title('格式1灰度图')
subplot(3,3,6);subimage(X,Newmap);title('格式2灰度图')
%灰度图像→索引图像
J=imread('fish24b.jpg');[X1,map1]=gray2ind(J,16);X2=grayslice(J,8);
subplot(3,3,7);subimage(J);title('灰度图')
subplot(3,3,8);subimage(X1);title('16灰度级图')
%subplot(3,3,9);subimage(X2,hot(8));title('均匀量化图')
subplot(3,3,4);subimage(X3,jet(8));title('非均匀量化图')
%7、灰度图像→二值图像
%BW=dither(I);%用抖动的方式实现转换,I可以是double类型和uint8类型
%BW=im2bw(I,level);%用阈值方式转换,BW为uint8类型
clf,I=imread('peacock24b.tif');
BW1=dither(I);
BW2=im2bw(I,0.5);
subplot(2,2,1);subimage(I);title('灰度图')
subplot(2,2,3);subimage(BW1);title('抖动二值化')
subplot(2,2,4);subimage(BW2);title('阈值二值化')
%8索引图像→二值图像
%BW=im2bw(X,map,level)%X可以是double类型和uint8类型,BW为uint8类型
clf,loadtrees;
BW=im2bw(X,map,0.5);
subplot(1,2,1);subimage(X,map);title('索引图')
subplot(1,2,2);subimage(BW);title('二值图')
%9数据矩阵→灰度图像
%
(1)%I=mat2gray(A,[max,min])%按指定的取值区间[max,min]将数据矩阵A转换为灰度图像I
%
(2)%I=mat2gray(A)%A为double类型,I为double类型
clf;I=imread('peacock24b.tif.tif');
A=filter2(fspecial('sobel'),I);
J=mat2gray(A);
subplot(1,2,1);subimage(I);title('原图')
subplot(1,2,2);subimage(J);title('转换图')
图像的加运算
I=imread('rice.png');%读取图像,大小为256*256,类型为uint8
J=imread('cameraman.tif');%读取图像,大小为256*256,类型为uint8
K=imadd(I,J,'uint16');%两幅图像相加,K的图像格式为uint16
L=imadd(I,120);%图像和一个常数相加
figure;
%依次显示四幅图像
subplot(221);imshow(I);subplot(222);imshow(J);
subplot(223);imshow(K,[]);subplot(224);imshow(L,[]);
图像的减运算
I=imread('rice.png');%读取图像
J=imread('cameraman.tif');%读取图像
K=imsubtract(I,J);%两幅图像相减
L=imsubtract(I,120);%一幅图像减去一个常数
figure;
%依次显示四幅图像
subplot(221);imshow(I);subplot(222);imshow(J);
subplot(223);imshow(K,[]);subplot(224);imshow(L,[]);
图像的乘运算
I=imread('moon.tif');%读取图像
I16=uint16(I);%转换图像数据类型
J=immultiply(I16,I16);%同一幅图像相乘
K=imread('rice.png');
L=immultiply(K,0.5);%图像乘以一个常数
figure;
%依次显示四幅图像
subplot(221);imshow(I);subplot(222);imshow(J);
subplot(223);imshow(K);subplot(224);imshow(L);
图像的除运算
I=imread('rice.png');
J=imread('cameraman.tif');
Ip=imdivide(I,J);%两幅图像相除
K=imdivide(I,2);%图像跟一个常数相除
figure;
%依次显示四幅图像
subplot(221);imshow(I);subplot(222);imshow(J,[]);
subplot(223);imshow(Ip,[]);subplot(224);imshow(K);
图像的一般线性运算
I=imread('rice.png');
J=imread('cameraman.tif');
K=imlincomb(1,I,1,J,'uint16');%两幅图像相加,加权系数分别为1,1
L=imlincomb(2,I);%一幅图像相乘,加权系数为2
figure;
%依次显示四幅图像
subplot(221);imshow(I);subplot(222);imshow(J);
subplot(223);imshow(K,[]);subplot(224);imshow(L,[]);
图像的逻辑运算
I=imread('cameraman.tif');
J=imread('rice.png');
I1=im2bw(I);%转化为二值图像
J1=im2bw(J);
K1=I1&J1;%逻辑与运算
K2=I1|J1;%逻辑或运算
K3=~I1;%逻辑非运算
K4=xor(I1,J1);%异或运算
figure;
%依次显示四幅图像
subplot(221);imshow(I);subplot(222);imshow(J);
subplot(223);imshow(I1);subplot(224);imshow(J1);
figure;
%依次显示四幅图像
subplot(221);imshow(K1);subplot(222);imshow(K2);
subplot(223);imshow(K3);subplot(224);imshow(K4);
图像的缩放
I=imread('rice.png');
[m,n]=size(I);
J1=imresize(I,0.2);%缩小0.2倍
J2=imresize(I,8,'nearest');%最近邻放大8倍
J3=imresize(I,[8*m8*n],'bilinear');%双线性放大8倍
figure;
subplot(221);imshow(I);subplot(222);imshow(J1);
subplot(223);imshow(J2);subplot(224);imshow(J3);
图像的旋转
I=imread('cameraman.tif');%读取图像
J1=imrotate(I,-45,'bicubic');%使用bicubic插值顺时针旋转45°
J2=imrotate(I,45,'bilinear','crop');%使用crop方式显示旋转后图像
J3=imrotate(I,45,'bilinear','loose');%使用loose方式显示旋转后图像
figure;
subplot(221);
imshow(I);
subplot(222);
imshow(J1);
subplot(223);
imshow(J2);
subplot(224);
imshow(J3);
图像的交互式裁剪
I=imread('circuit.tif');
figure,imshow(I)
I0=imcrop;
figure,imshow(I0);
I=imread('circuit.tif');
I2=imcrop(I,[7568130112]);
imshow(I),figure,imshow(I2)
快速傅里叶变换
%二维离散福利叶变换的快速变换
%Y=fft2(X,m,n);%X为要进行变换的矩阵,m,n是返回的变换矩阵的行数和列数,m,n可以省略
%Y=fft2(X);则返回的Y与X的行数和列数相同
%二维离散福利叶变换快速反变换
%Y=ifft2(X,m,n);%X为要进行变换的矩阵,m,n是返回的变换矩阵的行数和列数,m,n可以省略
%fftshift
%Y=fft2(X);%将傅里叶变换结果中零频率成分移到矩阵中心,有利于观察频谱。
%例
f=zeros(30,30);
f(5:
24,13:
17)=1;%生成一矩形函数
F0=fft2(f);%二维傅立叶变换
F2=log(abs(F0));
F=fft2(f,256,256);%先将30行30列矩阵填充零后变成256行256列数据矩阵
F1=fftshift(F);%将零频率移到中心位置
figure;
subplot(221);
imshow(f,'InitialMagnification','fit');%以合适窗口大小显示f
title('矩形窗口原图,返回30行30列')
subplot(222);
imshow(F2,[-15],'InitialMagnification','fit');%确定像素值的显示范围
title('傅里叶变换幅值的对数分布30行30列')
subplot(223);
imshow(log(abs(F)),[-15]);%
title('返回矩阵256行256列')
subplot(224);
imshow(log(abs(F1)),[-15]);%对数显示频移后的图像
title('频移后的傅里叶变换图')
%B=dct2(A)%二维离散余弦变换
%B=dct2(A,m,n)%二维离散余弦变换,m,n是变换返回的矩阵的行数和列数
%B=dct2(A,[m,n])%二维离散余弦变换,m,n是变换返回的矩阵的行数和列数
%B=dct2(A)
%B=idct2(A)%二维离散余弦变换
%B=idct2(A,m,n)%二维离散余弦变换,m,n是变换返回的矩阵的行数和列数
%B=idct2(A,[m,n])%二维离散余弦变换,m,n是变换返回的矩阵的行数和列数
%B=idct2(A)
%D=dctmtx(n)%返回二维离散余弦变换的变换矩阵,n取8或16
%例:
离散余弦变换和逆变换
RGB=imread('autumn.tif');%读取图像
I=rgb2gray(RGB);%转化为灰度图像
J=dct2(I);%离散余弦变换
figure,imshow(log(abs(J)),[]),%显示离散余弦变换的系数
colormap(jet(64)),
colorbar
J(abs(J)<10)=0;%置小系数为0
K=idct2(J);%离散余弦逆变换
figure,
subplot(121),imshow(I);subplot(122),imshow(K,[0255])
%例:
DCT用于图像压缩
I=imread('cameraman.tif');%读取图像
I=im2double(I);%转化为double型
T=dctmtx(8);%的变换矩阵
dct=@(x)T*x*T';%DCT变换公式
B=blkproc(I,[88],dct);%分块进行DCT变换
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];%DCT变换的小系数置为0
B2=blkproc(B,[88],@(x)mask.*x);%分块选择DCT变换的系数
invdct=@(x)T'*x*T;%DCT逆变换公式
I2=blkproc(B2,[88],invdct);%分块重构
figure,
subplot(121),imshow(I),subplot(122),imshow(I2)
%显示直方图
I=imread('011.tif');%读取图像
subplot(121),imshow(I);%显示原图像
subplot(122),imhist(I,2)%显示其直方图
%直方图均衡化
I=imread('tire.tif');%读取图像
J=histeq(I);%直方图均衡化
figure;%显示原图像和均衡化后的图像
subplot(221),imshow(I),title('显示原图像');
subplot(222),imshow(J),title('均衡化后的图像')
subplot(223),imhist(I,64),title('显示原图像的直方图');subplot(224),imhist(J,64),title('均衡化后图像的直方图')
%调整灰度范围
I=imread('pout.tif');
J=imadjust(I);%调整图像灰度
subplot(121),imshow(I),title('原图');subplot(122),imshow(J),title('调整图像灰度')
%imjust函数用于展现图像的细节,调节图像灰度到指定范围
I=imread('cameraman.tif');
J=imadjust(I,[0,0.2],[0.51]);%调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 光电 图像 处理 相关 程序