数字图像处理MATLAB
基(本)操(作)
- 图片读取
A=imread('test.bmp');
imshow(A);
2. 图像写入
A=imread('test.bmp');
imwrite(A,'test-bak.bmp');
B=imread('test-bak.bmp');
imshow(B);
3. 图像文件信息查询
info=imfinfo('test.bmp');
4. 显示图像
imshow()
- 添加颜色条到坐标轴colorbar
RGB=imread('test.bmp');
I=rgb2gray(RGB);
h=[1 2 1;0 0 0;-1 -2 -1];
I2=filter2(h,I);
imshow(I2,[]),colorbar('vert')
6. 纹理映射wrap
A=imread('test.bmp');
I=rgb2gray(A);
[x,y,z]=sphere;
warp(x,y,z,I);
- 显示多幅图像subimage
RGB=imread('test.bmp');
I=rgb2gray(RGB);
subplot(1,2,1),subimage(RGB);
subplot(1,2,2),subimage(I);
代数操作
- 加法imadd
RGB=imread('test.bmp');
J=imadd(RGB,100); %增加亮度
subplot(1,2,1),subimage(RGB);
subplot(1,2,2),subimage(J);
2. 减法imsubtract
I=imread('test.bmp');
J=imsubtract(I,100);
subplot(1,2,1),subimage(I);
subplot(1,2,2),subimage(J);
3. 乘法immultiply
I=imread('test.bmp');
J=immultiply(I,0.5); %将值缩小0.5,变暗
sublpot(1,2,1),subimage(I);
subplot(1,2,1),subimage(I);
subplot(1,2,2),subimage(J);
4. 除法imdivide
I=imread('test.bmp');
J=imdivide(I,0.5); %除以0.5,值变大,亮度变亮
subplot(1,2,1),subimage(I);
subplot(1,2,2),subimage(J);
空间域操作
- 缩放imresize
I=imread('test.bmp');
X1=imresize(I,2); %放大,宽高扩大两倍
figure,imshow(I);
2. 旋转imrotate
I=imread('test.bmp');
J=imrotate(I,45,'bilinear'); %旋转45°,后面是使用的算法
subplot(1,2,1),subimage(I);
subplot(1,2,2),subimage(J);
3. 裁剪imcrop
I=imread('test.bmp');
J=imcrop(I,[75 68 130 112]); %裁剪区域
subplot(1,2,1),subimage(I);
subplot(1,2,2),subimage(J);
特定区域处理
- 选择多边形区域roipoly
I=imread('test.bmp');
c=[200 250 278 248 199 172];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
subplot(1,2,1),subimage(I); %1行2列的图像
subplot(1,2,2),subimage(BW);
2. 灰度区域选择roicolor
a=imread('test.bmp');
I=rgb2gray(a);
BW=roicolor(I,128,225);
subplot(1,2,1),subimage(I);
subplot(1,2,2),subimage(BW);
- 指定区域二值掩模poly2mask
x=[63 186 54 190 63];
y=[60 60 209 204 60];
bw=poly2mask(x,y,256,256);
imshow(bw);
hold on
plot(x,y,'b','LineWidth',2)
hold off
4. roifillt2函数实现区域滤波
5. roifill 函数实现对特定区域进行填充
图像变换
- fft2 函数和ifft2 函数分别是计算二维的快速傅里叶变换和反变换
- fftshift 函数实现了补零操作和改变图像显示象限
- dct2 函数采用基于快速傅里叶变换的算法,用于实现较大输入矩阵的离散余弦变换,与之对应,idct2 函数实现图像的二维逆离散余弦变换
- dctmtx 函数用于实现较小输入矩阵的离散余弦变换
- edge 函数用于提取图像的边缘
- radon 函数用来计算指定方向上图像矩阵的投影
图像增强、分割和编码
- imhist 函数产生图像的直方图
- histeq 函数用于对图像的直方图均衡化
- filter2 函数实现均值滤波
- wiener2 函数实现Wiener(维纳)滤波
- medfilt2 函数实现中值滤波
图像模糊及复原
- deconvwnr 函数:使用维纳滤波器
- deconvreg 函数:使用约束最小二乘滤波器
- deconvlucy 函数:使用Lucy-Richardson 滤波器
- deconvblind 函数:使用盲卷积算法
a=imread('test.bmp');
I=rgb2gray(a);
figure;imshow(I); %原始图像
title('Original Image');
PSF=fspecial('motion',13,45); %运动模糊
figure;imshow(PSF); %真实的PSF图像
Blurred=imfilter(I,PSF,'circ','conv'); %得到运动模糊图像
figure;imshow(Blurred);title('Blurred Image'); %模糊化的图像
INITPSF=ones(size(PSF));
[J,P]=deconvblind(Blurred,INITPSF,30); %使用盲卷积
figure;imshow(J); %盲卷积初步复原的图像
%figure;imshow(P,[],'notruesize'); %旧版本
figure;imshow(P,[],'InitialMagnification','fit'); %初步重建使用的PSF