图像的几何变换maketform imtransform imresize imcrop

2023-05-16

背景

几何变换是将图像像素从一个位置映射到另一个位置。 几何变换有五种常见类型:剪切变换、平移变换、缩放变换、旋转变换和投影变换。 它们如图4.1所示。 在该图中,原始图像显示在(A)中,而变换后的图像显示在(B)到(F)中。
 几何变换可以表示为原始像素位置和新像素位置之间的矩阵方程。
 设f是输入图像。
 设g是对图像f应用几何变换时产生的输出图像。
 设(w,z)是输入图像f中的像素位置,该位置的像素值表示为f(w,z)。
 设(x,y)是输出图像g中对应的像素位置,该位置的像素值表示为g(x,y)。

矩阵形式的常见几何变换

MATLAB中的几何变换MATLAB图像处理工具箱提供了两个可用于对图像执行几何变换的函数:maketform和imtransform。 通常,需要两个主要步骤。

步骤1:使用功能maketform创建所需变换的描述。
  步骤2:使用函数imtransform将在步骤1中找到的变换应用于输入图像。

这两个函数的基本语法如下:

tform = maketform(transform_type,T)

g = imtransform(f,tform)

其中T是如表4.1中所述的3×3矩阵,transform_type可以是一个 在“仿射”,“投影”,“框”,“复合”或“自定义”这五个字符串中,f是输入图像,g是输出图像。

4.3.1执行单个仿射变换

a)例如,当图像Lena.bmp顺时针旋转30o时,我们将计算输出图像。
   运行此程序并研究其步骤。
   修改程序以计算和显示90o,135o和-45o旋转角度的输出图像。

f = imread('Lena.bmp'); % read an image 
%% Step 1: Create a description of the desired transform % Create 3-by-3 transformation matrix  
alpha = pi/6;  
T = [cos(alpha) sin(alpha) 0; -sin(alpha) cos(alpha) 0; 0 0 1] ;
 % Create TFORM structure  tform = maketform('affine', T); 
%% Step 2: Apply the transform on the input image
 g = imtransform(f, tform); imshow(g);

问题1:

基于4.1并使用Lena.bmp作为输入图像,编写一个MATLAB程序来执行以下几何转换并显示输出图像。
   将输入图像在水平方向上缩放1.5倍,在垂直方向上缩放2倍。 输出图像的大小是多少?
   在水平方向上将输入图像剪切0.2倍。
   将输入图像在水平方向上平移50个像素,在垂直方向上平移100个像素。

实现: 

 

%q1.1
close all;clear all;clc 
f = imread('Lena.bmp');
sx=1.5;
sy=2;
T=[sx 0 0
    0 sy 0
    0 0 1];
t1 = maketform('affine',T); 
g = imtransform(f,t1);
figure;
subplot(1,2,1), imshow(f), title('original image');
subplot(1,2,2), imshow(g), title('scale image');
[x,y]=size(g); fprintf('the size of scale image is %.0f, %.0f\n',x,y)
%%
%q1.2
close all;clear all;clc 
f = imread('Lena.bmp');
Ts = maketform('affine',[1 0 0; 0.2 1 0; 0 0 1]);
g2 = imtransform(f,Ts); 
imshow(g2), title('shear image');
%% 
%q1.3
close all;clear all;clc  
f = imread('Lena.bmp'); 
t=[1 0 0;0 1 0;50 100 1];
T = maketform('affine',t);
g3=imtransform(f,T, 'XData', [1 (size(f,2)+t(3,1))], 'YData', [1 (size(f,1)+t(3,2))],'FillValues', 255 );
%图像平移,size(f,2)表示原始图像列数,t(3,1)表示第三行第一列
%g3 = imtransform(f,T);  
imshow(g3), title('transformer image');axis on;

对于上述每个变换,编写相应的3×3变换矩阵。
   4.3.2组合多个仿射变换多个仿射变换的组合也是仿射变换。 例如,让T1,T2和T3为代表三个不同几何变换的3×3矩阵。 在输入图像上连续应用三个变换等效于应用一个合成变换T,由T=T1*T2*T3

a)对于以下给出的三个几何变换,确定变换类型:旋转,缩放,平移,剪切还是投影?


 b)当我们在输入图像Lena.bmp上应用三个转换(首先是T1,然后是T2,最后是T3)时,计算并显示输出图像。
 c)计算T1,T2和T3的乘积T。 当将T给出的几何变换应用于输入图像Lena.bmp时,计算输出图像。
  d)比较(b)和(c)部分的输出图像。 对结果发表评论。

4.3.3投影变换投影变换由八个参数控制:t11,t12,t13,t21,t22,t23,t31和t32。 如果我们知道输入图像中的四个点和输出图像中的对应的四个点,则可以确定这些参数。
   例如,我们将实现一个投影变换,将输入图像中的四个点映射到输出图像中的四个点(图4.3)。 这些点的坐标在表4.2中给出。 

4.2中显示了实现此转换的程序。
   程序使用“图像处理工具箱”中的一个名为cp2tform的函数来查找用于转换的适当参数。
   程序使用imtransform函数将变换应用于输入图像。 在此示例中,我们通过参数“ XData”和“ YData”指定输出图像的大小。
   a)运行清单4.2中的程序并研究其输出。
   b)为四个输出点输入不同的坐标集,并观察输出图像。

4.4用于几何图像操作的其他MATLAB函数除了MATLAB函数maketform和imtransform之外,MATLAB还提供用于简单几何变换的函数。 为了完整起见,在本节中,我们将研究三个这样的命令

imresize:用于调整图像大小

imrotate:用于旋转图像

imcrop:用于裁剪图像或截取图像的矩形区域。
   4.4.1调整图像大小要更改图像大小,请使用imresize功能。 下面的示例说明了调用此函数的不同方法。 

f = imread('Lena.bmp'); % read an image

g = imresize(f, 1.25); % enlarge image 1.25 times

g = imresize(f, 0.5); % reduce image by a half

g = imresize(f, [300 600]);% resize image to 300-by-600 pixels

4.4.2旋转图像要旋转图像,请使用旋转功能。 以下示例显示如何使用此功能。 

f = imrotate(f, 45); % 逆时针选择45度 

f = imrotate(f, -100); % 逆时针%-100度 

4.4.3裁切图像要提取图像的矩形区域,请使用裁切功能。 它的语法为

g = imcrop(f,[min_col min_row region_width region_height])

例如,以下命令提取一个区域,其中左列= 40,顶行= 50,宽度= 300,高度= 200:

g = imcrop  (f,[40 50 300 200]); imshow(g) 

E3。 图像旋转无需使用MATLAB内置函数进行旋转或不变形,就可以编写MATLAB函数以使图像绕其中心顺时针旋转角度为。 该函数的语法为g = rotation_image(f,theta)

提示:假设输入图像(w,z)中的一个点是已知的,那么输出图像中的对应点(x,y)是什么? 用(w,z)来写(x,y)的矩阵方程。
   假设输出图像(x,y)中的点是已知的,那么输入图像中的对应点(w,z)是什么? 用(x,y)来写(w,z)的矩阵方程。
   步骤1:通过计算四个图像角的新坐标来确定输出图像的大小。
   步骤2:针对输出图像中的每个像素位置(x,y)进行循环:o在输入图像中找到对应的点(w,z),o将像素值从输入图像复制到输出图像g(x,  y)= f(w,z)。
   o如果需要,使用最近邻像素插值。

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

图像的几何变换maketform imtransform imresize imcrop 的相关文章

随机推荐

  • 分类回归模型评估常见方法及ROC AUC

    目录 模型评估常见方法 ROC和AUC定义 sklearn计算ROC具体实现 计算ROC需要知道的关键概念 1 分析数据 2 针对score xff0c 将数据排序 3 将截断点依次取为score值 3 1 截断点为0 1 sklearn
  • Coursera 吴恩达《Machine Learning》课堂笔记 + 作业

    记录一下最近学习的资源 xff0c 方便寻找 xff1a Github 上已经有人把作业整理成为 Python 的形式了 有 py 和 ipynb 两种格式 https github com nsoojin coursera ml py h
  • tensflow学习小知识tf.train.exponential_decay

    tf train exponential decay是tensflow1 X版本的2 版本使用以下语句 tf compat v1 train exponential decay 将指数衰减应用于学习率 tf compat v1 train
  • PyTorch学习系列之PyTorch:nn和PyTorch:optim优化

    PyTorch xff1a nn 在构建神经网络时 xff0c 我们经常考虑将计算分为几层 xff0c 其中一些层具有可学习的参数 xff0c 这些参数将在学习过程中进行优化 在TensorFlow xff0c 像包 Keras xff0c
  • tf.gather()用法详解

    tf gather params indices validate indices 61 None axis 61 None batch dims 61 0 name 61 None 请注意 xff0c 在CPU上 xff0c 如果找到超出
  • 代码学习之Python冒号详解

    最近看代码发现对冒号用法理解不够透彻 xff0c 记录学习一下 xff1a 1 冒号的用法 1 1 一个冒号 a i j 这里的i指起始位置 xff0c 默认为0 xff1b j是终止位置 xff0c 默认为len a xff0c 在取出数
  • Jupyter Notebook导入和删除虚拟环境 超详细

    记录一下Jupyter Notebook导入和删除虚拟环境的步骤 xff0c 网上博客参差不齐 xff0c 每次找好几个才看到简明容易理解的 方法一步骤 为不同的环境配置kernel 有时候使用conda命令创建了新的python环境 xf
  • tf.expand_dims用法详解

    看官方讲解一些博客感觉一直不是很懂 xff0c 下面是我的个人理解结合官方文档 xff0c 有问题欢迎指出 tf expand dims tf expand dims input axis 61 None name 61 None dim
  • argparse 命令行选项、参数和子命令解析器

    最近看到很多论文代码都是用解析器写的 argparse 命令行选项 参数和子命令解析器 argparse 模块可以让人轻松编写用户友好的命令行接口 程序定义它需要的参数 xff0c 然后 argparse 将弄清如何从 sys argv 解
  • torch.unsqueeze和 torch.squeeze() 详解

    1 torch unsqueeze 详解 torch unsqueeze input dim out 61 None 作用 xff1a 扩展维度 返回一个新的张量 xff0c 对输入的既定位置插入维度 1 注意 xff1a 返回张量与输入张
  • Android中获取唯一的id

    文章目录 Android唯一设备ID现状IMEIMAC地址唯一Id实现方案那些硬件适合硬件标识工具类 Android唯一设备ID现状 设备ID xff0c 简单来说就是一串符号 xff08 或者数字 xff09 xff0c 映射现实中硬件设
  • debian虚拟机下如何安装增强功能

    1 安装gcc和kernel headers gcc有可能默认安装的有 xff08 如果没有还需要安装gcc xff09 xff0c 但是还需要安装build essential sudo apt get install build ess
  • PyTorch学习系统之 scatter() 函数详解 one hot 编码

    torch Tensor scatter scatter 和 scatter 的作用是一样的 xff0c 只不过 scatter 不会直接修改原来的 Tensor xff0c 而 scatter 会 torch Tensor scatter
  • 最新RNN相关模型

    最近在看最新RNN相关模型 找到很多论文 Fundamentals of Recurrent Neural Network RNN and Long Short Term Memory LSTM network 递归神经网络 xff08 R
  • 知识追踪模型的应用

    背景 MOOC 近年来 xff0c 随着在线学习系统在教育环境中越来越普及 xff0c 在线学习人数越来越多 xff0c 教育者不可能追踪每一个学习者的知识状态并提供个性化的学习指导 xff1b 在线学习系统中的知识需要学习者通过各种冗余信
  • 自然语言处理之语料库

    语料库 定义 xff1a 语料库 corpus 就是存放语言材料的仓库 语言数据库 xff09 语料库技术的发展 早期 xff1a 语料库在语言研究中被广泛使用 xff1a 语言习得 方言学 语言教学 句法和语义 音系研究等 沉寂时期 xf
  • 知识追踪入门系列-论文资料汇总

    Paper xff1a 知识追踪相关论文 下载论文和代码见reference第一个链接 Deep Knowledge Tracing 首次提出将RNN用于知识追踪 xff0c 并能够基于复杂的知识联系进行建模 xff08 如构建知识图谱 x
  • 知识追踪方法比较

    DKT xff1a Deep knowledge tracing In Advances in neural information processing systems 这是一种开创性的方法 xff0c 它使用单层LSTM模型来预测学生的
  • 机器学习 注意力 笔记资料贴

    Self Attention与Transformer详解 https zhuanlan zhihu com p 47282410 写的非常详细 https jalammar github io illustrated transformer
  • 图像的几何变换maketform imtransform imresize imcrop

    背景 几何变换是将图像像素从一个位置映射到另一个位置 几何变换有五种常见类型 xff1a 剪切变换 平移变换 缩放变换 旋转变换和投影变换 它们如图4 1所示 在该图中 xff0c 原始图像显示在 A 中 xff0c 而变换后的图像显示在