Matlab学习11-图像处理之图像变换

2023-11-13


一、傅里叶变换快速卷积

代码

% 傅里叶变换快速卷积
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个幅度谱)");

总结

点击获取源码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab学习11-图像处理之图像变换 的相关文章

  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua
  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾

随机推荐

  • Verilog自动生成 CRC 校验代码

    CRC 循环冗余码 表示形式 多项式G x G x X4 X3 1 假设 输入数据 Data 选定的多项式G x 是x4 x3 1 所以G M 11001 CRC Data mod G 注 CRC的位数要始终比G少1位 因为余数肯定比除数小
  • JAVA中使用FTPClient上传下载

    JAVA中使用FTPClient上传下载 在JAVA程序中 经常需要和FTP打交道 比如向FTP服务器上传文件 下载文件 本文简单介绍如何利用jakarta commons中的FTPClient 在commons net包中 实现上传下载文
  • 2023华为OD机试真题Java实现【深度优先搜索/机器人】

    题目描述 现有一个机器人 可放置于M N的网格中任意位置 每个网格包含一个非负整数编号 当相邻网格的数字编号差值的绝对值小于等于1时 机器人可以在网格间移动 问题 求机器人可活动的最大范围对应的网格点数目 说明 网格左上角坐标为 0 0 右
  • 全网最全的私网多种穿透互联技术解析

    多种业务场景存在私网的情况下需要对网络的互联互通 视情况使用以下多种网络工具进行互联 以下使用的工具都是跨平台的 适用大多数操作系统 Openvpn 前言 操作系统 Centos6 Centos7 Centos8 openvpn的虚拟网卡是
  • 动态规划——购物单

    HJ16 购物单 这是一道典型的0 1背包问题 一开始的反应就是外层循环正向遍历物品 内层循环反向遍历背包容量 但由于物品增加了附件这一属性 使得这道题难度增加了不少 可以参考该视频处理物品的思路 每个物品用长度为6的数组来分别保存索引为i
  • CNN

    卷积神经网络 Convolutional Neural Networks 是一种深度学习模型或类似于人工神经网络的多层感知器 常用来分析视觉图像 CNN在图像分类数据集上有非常突出的表现 DNN与CNN 下图为DNN 下图为CNN 虽然两张
  • 低压差线性稳压电源(LDO)原理、参数及应用

    文章目录 前言 一 低压差线性稳压电源是什么 二 LDO工作原理 1 NPN稳压器 2 LDO稳压器 3 准LDO稳压器 4 场效应管 FET 作为导通管LDO 三 LDO的参数 1 裕量电压 2 静态电流和接地电流 3 效率 4 PSRR
  • 错误:‘uuid_t’在此作用域中尚未声明

    安装TFS报错 1 2 3 4 5 6 7 8 9
  • MYSQL 中 LIMIT 用法

    mapper文件中的sql 在实体类中定义的属性 start 从第几条记录开始 size 读取几条记录 select id findAllUsers parameterType Map resultType entity IUser gt
  • 华为OD机试 - 座位调整(JS)

    题目描述 疫情期间课堂的座位进行了特殊的调整 不能出现两个同学紧挨着 必须隔至少一个空位 给你一个整数数组 desk 表示当前座位的占座情况 由若干 0 和 1 组成 其中 0 表示没有占位 1 表示占位 在不改变原有座位秩序情况下 还能安
  • java--注解和反射

    一 注解 1 1 注解Annotation的概念 1 注解的作用 注解Annotation是从JDK1 5开始引入的新技术 我们在编程中经常会使用到注解 它的作用有 1 编译检查 比如 SuppressWarnings Deprecated
  • 【使用html2pdf将页面生成PDF文件】

    前端使用html2pdf将页面生成PDF文件 一 下载js文件 链接 https cdnjs cloudflare com ajax libs html2pdf js 0 10 1 html2pdf bundle min js 二 引入js
  • poi 操作 PPT,针对 PPTX--图表篇

    poi 操作 PPT 针对 PPTX 图表篇 文章目录 poi 操作 PPT 针对 PPTX 图表篇 1 读取 PPT 模板 2 替换标题 4 替换图表数据 接下来对 ppt 内的图表进行操作 替换图表的数据 原幻灯片样式 1 读取 PPT
  • 并发编程基本概念(进程,线程,协程,线程池,同步/互斥)

    并发编程基本概念 一 进程的概念 计算机的核心是CPU 它承担了所有的计算任务 而操作系统是计算机的管理者 它负责任务的调度 资源的分配和管理 统领整个计算机硬件 应用程序则是具有某种功能的程序 程序是运行于操作系统之上的 进程 从用户角度
  • 企业微信三方应用开发(一)三方应用开发设置,suit_ticket获取,验证回调有效性

    加我微信li570467731 拉你进二百多人企业微信开发同行群 文末有二维码 企业微信开发三部曲 企业微信应用开发概述篇 免费 已完结 企业微信开发第三方应用开发篇 更新中 企业微信开发自建内部应用开发 筹备中 关注公众号 ToB Dev
  • 练习:“快乐数”判断

    练习 快乐数 判断 APP发文编辑机制更新后 慢热的我还适应不来 这里只放了 python 代码 运行效果和题目 请点击前面蓝色文字 移步我昨天的 学习打卡 帖 Pyonth 代码 coding utf 8 from random impo
  • 冒泡排序详解(C语言)

    对于刚入门学习编程的新手来说 冒泡排序应该是大家接触的第一个算法 由于刚接触编程不久 新手的思维还没有得到很好的开拓 冒泡排序在一开始对新手来说有些难理解 现在就让我们来看看新手如何更好的来理解冒泡排序算法 冒泡排序的思路 假设数组有n个数
  • Attentional Feature Fusion 注意力特征融合

    Attentional Feature Fusion 注意力特征融合 最近看到一篇比较不错的特征融合方法 基于注意力机制的 AAF 与此前的 SENet SKNet 等很相似 但 AFF 性能优于它们 并且适用于更广泛的场景 包括短和长跳连
  • Web3存储赛道Arweave(AR)

    Arweave简介 Arweave的愿景是成为一座新的亚历山大图书馆 旨在成为世界知识的普遍宝库 Arweave是一个类似FileCoin的新的去中心化存储平台 Arweave通过区块链的方式实现 文件存在每一个区块上 Arweave原来的
  • Matlab学习11-图像处理之图像变换

    文章目录 一 傅里叶变换快速卷积 二 模板匹配 三 二维离散余弦变换 四 JPEG图像压缩典型算法 总结 一 傅里叶变换快速卷积 代码 傅里叶变换快速卷积 disp 步骤1 生成3 3的矩阵A和B A 4 5 6 7 8 9 B 3 2 1