当前位置:网站首页>Matlab学习11-图像处理之图像变换
Matlab学习11-图像处理之图像变换
2022-08-03 11:30:00 【CHengYuP】
一、傅里叶变换快速卷积
代码
% 傅里叶变换快速卷积
disp("步骤1:生成3*3的矩阵A和B");
A =[4 5 6
7 8 9];
B=[ 3 2
1 0];
disp("步骤2:验证利用卷积函数直接进行卷积");
AconvB=conv2(A,B);
disp("步骤3:对A和B补零,使其大小均为(2+2-1)X(3+2-1),即3X4");
A(3,4)=0;%对矩阵A补零
A0=A;
B(3,4)=0;%对矩阵B补零
B0=B;
disp("步骤4:对A和B分别进行傅里叶变换,并将变换结果相乘");
fftA0=fft2(A0);
fftB0=fft2(B0);
A0dcB0=fftA0.*fftB0;
disp("步骤5:对结果进行傅里叶变换");
ifftA0dcB0=ifft2(A0dcB0); %正变换与反变换结合
mm=uint8(ifftA0dcB0);
二、模板匹配
效果
代码
% 模板匹配示例。
%步骤1
%读入匹配图像
fxy=imread("img/F6_17a.bmp");
subplot(3,3,1),imshow(fxy),xlabel("(a)步骤1:二值原始图像");
axis image off
%把匹配图像转为二值图像
Bwfxy=im2bw(fxy);
%步骤2
Fuv=fft2(Bwfxy);
subplot(3,3,2),mesh(abs(fftshift(Fuv))),xlabel("(b)步骤2:二值原始图像对称傅里叶幅度图");
grid on;%网格线
axis([0 500 0 500 0 40000]);
%步骤3
%读入模板
txy=imread("img/F6_17c.bmp");
subplot(3,3,3),imshow(txy),xlabel("(c)步骤3:二值模板图像");
axis image off;
%把模板图像转为二值图像
Bwtxy=im2bw(txy);
%步骤4
RotBwtxy=rot90(Bwtxy,2);
subplot(3,3,4),imshow(RotBwtxy),xlabel("(d)步骤4:二值模板图像旋转180度");
axis image off;
%步骤5
Tuv=fft2(RotBwtxy);
subplot(3,3,6),mesh(abs(fftshift(Tuv))),xlabel("(e)步骤5:二值模板图像对称傅里叶幅度图");
grid on;%网格线
axis([0 500 0 500 0 4000]);
%步骤6
%模板与匹配图像相关计算
f=ifft2(Fuv.*Tuv);
fxy_result=abs(fftshift(f));
subplot(3,3,7),mesh(fxy_result,[-10 50]),xlabel("(f)步骤6:相关性矩阵的模板矩阵三维图");
grid on;%网格线
axis([0 500 0 500 0 4000]);
%步骤7
thresh=max(fxy_result(:));%设置阈值为图像数据中的最大值
subplot(3,3,9),imshow(fxy_result>=thresh-250),xlabel("(g)步骤7:模板匹配结果");
三、二维离散余弦变换
效果
代码
% 二维离散余弦变换原理示例。
fxy=[ 0 20 40 60
70 90 110 130
140 160 180 200
210 230 240 250];
subplot(2,3,1),imshow(fxy,[]),xlabel("(b)原始图像");
subplot(2,3,2),stem3([1:4],[1:4],fxy,'.'),axis([0 5 0 5 0 260]),xlabel("(c)原始图像三维示意图");
Fuv=dct2(fxy); %离散余弦变换结果
ABSFuv=abs(Fuv); %离散余弦变换结果的绝对值
subplot(2,3,3),imshow(ABSFuv,[]),xlabel("(f)离散余弦变换幅度谱图像");
subplot(2,3,4),stem3([1:4],[1:4],ABSFuv,'.'),axis([0 5 0 5 0 600]),xlabel("(g)离散余弦变换幅度谱三维示意图");
LogABSFuv=log(ABSFuv); %离散余弦变换结果的绝对值对数
subplot(2,3,5),imshow(LogABSFuv,[]),xlabel("(i)幅度谱对数结果图像");
subplot(2,3,6),stem3([1:4],[1:4],LogABSFuv,'.'),axis([0 5 0 5 0 7]),xlabel("(j)幅度谱对数结果三维示意图");
四、JPEG图像压缩典型算法
效果
代码
% JPEG图像压缩典型算法。
fxy=imread("img/lena.bmp");
subplot(2,2,1),imshow(fxy),xlabel("(a)原始图像");
fxy=im2double(fxy);
H=dctmtx(8);%产生8*8的DCT变换矩阵
Fuv1=blkproc(fxy,[8 8],'P1*x*P2',H,H');%分块进行DCT变换
mask1=[ 1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
];%二值掩膜,用于压缩DCT系数
Fuv1=blkproc(Fuv1,[8,8],'P1.*x',mask1);%仅保留DCT系数左上角的3个系数
fxy1=blkproc(Fuv1,[8,8],'P1*x*P2',H',H);%分块进行逆DCT变换
subplot(2,2,2),imshow(fxy1,[]),xlabel("(b)重构图像(保留左上角的3个幅度谱)");
Fuv2=blkproc(fxy,[8,8],'P1*x*P2',H,H'); %分块进行DCT变换
mask2=[ 1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
];%二值掩膜,用于压缩DCT系数
Fuv2=blkproc(Fuv2,[8,8],'P1.*x',mask2);%仅保留DCT系数左上角的6个系数
fxy2=blkproc(Fuv2,[8,8],'P1*x*P2',H',H);%分块进行逆DCT变换
subplot(2,2,3),imshow(fxy2,[]),xlabel("(c)重构图像(保留左上角的6个幅度谱)");
Fuv3=blkproc(fxy,[8,8],'P1*x*P2',H,H'); %分块进行DCT变换
mask3=[ 1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
];%二值掩膜,用于压缩DCT系数
Fuv3=blkproc(Fuv3,[8,8],'P1.*x',mask3);%仅保留DCT系数左上角的6个系数
fxy3=blkproc(Fuv3,[8,8],'P1*x*P2',H',H);%分块进行逆DCT变换
subplot(2,2,4),imshow(fxy3,[]),xlabel("(d)重构图像(保留左上角的10个幅度谱)");
总结
边栏推荐
- 进程内存
- 多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)
- 技术总监需要会些什么?也太难了!
- 【JDBC以及内部类的讲解】
- 二叉搜索树(搜索二叉树)模拟实现(有递归版本)
- Why is the new earth blurred, in-depth analysis of white balls, viewing pictures, and downloading problems
- 本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
- 一个扛住 100 亿次请求的红包系统,写得太好了!!
- LeetCode 899 Ordered queue [lexicographical order] HERODING's LeetCode road
- 基于SSM和Web实现的农作物生长监控系统
猜你喜欢

赛灵思MPSOC裸机下的 USB调试实验

优维低代码:Provider 构件

Fastjson反序列化
![LeetCode 899 Ordered queue [lexicographical order] HERODING's LeetCode road](/img/95/1b63cfb25b9e0802666114f089fcb8.png)
LeetCode 899 Ordered queue [lexicographical order] HERODING's LeetCode road

Lease recovery system based on PHP7.2+MySQL5.7

程序员架构修炼之道:软件架构基本概念和思维

Babbitt | Metaverse daily must-read: Players leave, platforms are shut down, and the digital collection market is gradually cooling down. Where is the future of the industry?...

Dva.js 新手入门指南

SmobilerService 推送实现

完全背包问题
随机推荐
complete knapsack problem
微信小程序获取用户手机号码
ThreadLocal源码解析及使用场景
实现2d人物在跳跃的同时左右移动
MySQL - 2059 - Authentication plugin ‘caching_sha2_password‘ cannot be loaded
机器比人更需要通证
图新地球为什么很模糊,白球、看图、下载问题深度剖析
Simple implementation of a high-performance clone of Redis using .NET (1)
性能优化|从ping延时看CPU电源管理
【Star项目】小帽飞机大战(九)
[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly
谷歌研究员被群嘲:研究员爆料AI有意识,被勒令休假
html网页如何获取后台数据库的数据(html + ajax + php + mysql)
基于PHP7.2+MySQL5.7的回收租凭系统
矩阵的计算[通俗易懂]
一个扛住 100 亿次请求的红包系统,写得太好了!!
How to retrieve IDC research reports?
For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
增加WebView对localStorage的支持
ABAB-740新语法