语法规则:B=imtranslate(A,[h,v])
A:原图像,B:结果图像
h>0右边移动,V>0下移
h<0左边移动,V<0上移
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=imtranslate(I,[50,100]);
I2=imtranslate(I,[-20,-100]);
subplot(2,2,1);imshow(I);title('原图');
subplot(2,2,2);imshow(I1);title('右平移50,下平移100');
subplot(2,2,3.5);imshow(I2);title('左平移20,上平移100');
语法规则:B=imrotate(A,K)
A:原图像,B:结果图像
旋转方向角度K:K>0逆时针,K<0顺时针
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=imrotate(I,50);I2=imrotate(I,-10);
subplot(2,2,1);imshow(I);title('原图');
subplot(2,2,2);imshow(I1);title('逆时针旋转50度');
subplot(2,2,3.5);imshow(I2);title('顺时针旋转10度');
运行结果
语法规则:B=imresize(A,K)
A:原图像,B:结果图像
放缩倍数K:K>1放大,K<1缩小
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=imresize(I,0.5);I2=imresize(I,10);
subplot(2,2,1);imshow(I);title('原图');
subplot(2,2,2);imshow(I1);title('缩小0.5倍');
subplot(2,2,3.5);imshow(I2);title('放大10倍');
运行结果
注意:此时可能有人会说图像显示一样大小,虽然显示一样大,但是查看图像变 量会发现I、I1和I2的大小会发现已经实现了缩放,只是显示一样大小而已。
语法规则:B=fliplr(A)
A:原图像,B:结果图像
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=fliplr(I);
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(I1);title('水平镜像');
运行结果
语法规则:B=flipud(A)
A:原图像,B:结果图像
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
I1=flipud(I);
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(I1);title('垂直镜像');
第二章 图像正交变换
语法规则:
正变换:B=dct2(A)
逆变换:B=idct2(A)
A:原图像,B:结果图像
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lenaRGB.bmp']);
subplot(2,2,1);imshow(I);title('原始图像');
gr=rgb2gray(I);%灰度化
subplot(2,2,2);imshow(gr);title('灰度化图像');
I1=dct2(gr);%离散余弦变换
subplot(2,2,3);imshow(I1);title('离散余弦变换');
I2=idct2(I1);%逆离散余弦变换
subplot(2,2,4);imshow(I2,[]);title('逆离散余弦变换');
运行结果
语法规则:
正变换:B=fft2(A)
逆变换:B=ifft2(A)
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lena512.bmp']);
subplot(2,2,1);imshow(I);title('原始图像');
I1=fft2(I);%傅里叶变换
t=fftshift(I1);t1=abs(t);t2=log(t1);%将图像能量点移到中心
subplot(2,2,2);imshow(I1);title('傅里叶变换');
subplot(2,2,3);imshow(t2,[]);title('傅里叶变换,能量移到原点');
I2=ifft2(I1);%逆傅里叶变换
subplot(2,2,4);imshow(I2,[]);title('逆傅里叶变换');
运行结果
语法规则:
正变换:[ca,cb,cc,cd] =dwt2(X,wname)
逆变换:Y= idwt2([ca,cb,cc,cd],'wname')
X:原图像,Y:逆变换后的图像,wname:小波的名字
ca:近似矩阵;cb,cc,cd为细节矩阵;
小波名称包括:db1、db2、……、db45和haar;
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lena512.bmp']);
subplot(2,4,1);imshow(I);title('原始图像');
[ca,cb,cc,cd]=dwt2(I,'db1');%离散小波变换
subplot(2,4,2);imshow(ca,[]);title('离散小波变换(ca子带图)');
I2=idwt2(ca,cb,cc,cd,'db1');
subplot(2,4,3),imshow(I2,[]);title('逆离散小波变换');
subplot(2,4,4);imshow(cb,[]);title('cb子带图')
subplot(2,4,5);imshow(cc,[]);title('cc子带图')
subplot(2,4,6);imshow(cd,[]);title('cd子带图')
subplot(2,4,7);imshow([ca,cb;cc,cd],[]);title('全部子带图')
语法规则:
正变换:[ca,cb,cc,cd]=lwt2(X,wname)
逆变换:Y=ildwt2([ca,cb,cc,cd],wname)
X:原图像,Y:逆变换后的图像,wname:小波的名字
ca:近似矩阵;cb,cc,cd为细节矩阵;
注意:提升小波变换原始图像需要用double处理
提升小波名称如下表:
WHAME Value |
---|
‘lazy’ |
‘haar’ |
‘db1’、 ‘db2’、 ‘db3’、 ‘db4’、 ‘db5’、 ‘db6’、 ‘db7’、 ‘db8‘ |
‘sym2’、‘sym3’、‘sym4’、‘sym5’、‘sym6’、‘sym7’、‘sym8’ |
Cohen-Daubechies-Feauveau wavelets‘cdf1.1’、 ‘cdf1.3’、 ‘cdf1.5’‘cdf3.1’、 ‘cdf3.3’、 ‘cdf3.5’‘cdf5.1’、 ‘cdf5.3’、 ‘cdf5.5’‘cdf2.2’、 ‘cdf2.4’、 ‘cdf2.6’‘cdf4.2’、 ‘cdf4.4’、 ‘cdf4.6’‘cdf6.2’、 ‘cdf6.4’、 ‘cdf6.6’、 |
‘biorX.Y‘ |
‘rbioX.Y’ |
‘bs3’ |
‘rbs3’ |
‘9.7’ |
‘r9.7’ |
clc;clear;
s=what;
p=s.path;
I=imread([p,'\图像素材\','lena512.bmp']);
I=double(I);
subplot(2,4,1);imshow(I,[]);title('原始图像');
[ca,cb,cc,cd]=lwt2(I,'haar');%提升小波变换
subplot(2,4,2);imshow(ca,[]);title('提升小波变换(ca子带图)');
I2=ilwt2(ca,cb,cc,cd,'haar');
subplot(2,4,3),imshow(I2,[]);title('逆提升小波变换');
subplot(2,4,4);imshow(cb,[]);title('cb子带图')
subplot(2,4,5);imshow(cc,[]);title('cc子带图')
subplot(2,4,6);imshow(cd,[]);title('cd子带图')
test=[ca,cb;cc,cd];
subplot(2,4,7);imshow(test,[]);title('全部子带图')
运行结果
以上就是今天介绍的图像处理推文全部内容,后期小编会陆续更新系统的matlab图像处理推文,希望大家持续关注,如有错误或者不懂的地方,可以留言评论,小编当竭诚为大家服务解答疑惑。
参考资料:
[1] https://www.mathworks.com/help/wavelet/ref/idwt2.html
[2] https://edu.51cto.com/course/16757.html