图像的仿射变换原理和实现

opencv 图像处理 最小二乘法 仿射变换 详解 在标定时常用到仿射变换,但Opencv中放射变换仅支持三对点作为参数。遇到需要多点标定的情况则需要最小二乘法的仿射变换了。 原opencv中 获取仿射变换的函数getAffineTransform() 的用法如下 vector<Point2f> sro={Point2f(0,0),Point2f(1,0),Point2f(0,1)}; vector<Point2f>... 阅读详情

     仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。一般而言,仿射变换矩阵为2*3的矩阵,第三列的元素起着平移的作用,前面两列的数字对角线上是缩放,其余为旋转或者错切的作用。透视变换原理及实现请看我下篇博客。

    设仿射变换矩阵T = [a11,a12,a13 ; a21,a22,a23]; 图像上fixed points坐标为(Xk,Yk);moving points坐标为(xk,yk),其中k=1,2,...,n。

     为了求解该仿射变换矩阵T的6个未知参数,理论上至少需要6个方程联立求解,即需要3组点集对,n>=3,当n>3时用最小二乘法求解未知参数。并且这三组点不共线。

数学展开式如下图:


下面根据上面公式给出实现代码,图像使用最近邻插值。

%% 读取原图像
clear ;
close all;
src=rgb2gray(imread('lena.png'));  
imshow(src);  
  
%% method1,用3组点集对图像进行仿射变换,调用matlab系统函数  
fixedPoints = [1,1; 1,100;100,100];  
movingPoints = [20,20; 120,80; 160,200];  
tic;
tform = fitgeotrans(movingPoints,fixedPoints,'affine');  
dst_img = imwarp(src,tform);  
t_sys = toc;
figure;imshowpair(src,dst_img,'montage');
title(['系统函数的仿射变换图像,耗时(s):',num2str(t_sys)])  
  
%% method2,用3组点集对图像进行仿射变换,解方程求变换矩阵  
% T = [a11,a12,a13;a21,a22,a33];  
% 满足fixed_pt_matrix = T*moving_pt_matrix;
tic;
fixed_pt_matrix = fixedPoints';
moving_pt_matrix = [movingPoints';ones(1,size(movingPoints,1))]; 
T = fixed_pt_matrix/moving_pt_matrix;  

width = size(src,2);
height = size(src,1);
[moving_pt_x,moving_pt_y] = meshgrid(1:width,1:height);
coridate_affine = T*[moving_pt_x(:)';% 对原来图像所有坐标点变换到新平面上
    moving_pt_y(:)';
    ones(1,width*height)];
x_temp = coridate_affine(1,:);
y_temp = coridate_affine(2,:);
fixed_pt_x = reshape(x_temp,...
    size(moving_pt_x))+...
    abs(min(x_temp))+1;
fixed_pt_y = reshape(y_temp,...
    size(moving_pt_y))+...
    abs(min(y_temp))+1;
fixed_pt_x = round(fixed_pt_x);
fixed_pt_y = round(fixed_pt_y);

dst_affine_img = zeros(round(max(y_temp)-min(y_temp))+1,...
    round(max(x_temp)-min(x_temp))+1);
for i = 1:height
    for j = 1:width
        dst_affine_img(fixed_pt_y(i,j),fixed_pt_x(i,j)) = src(i,j);
    end
end
t_manual = toc;
figure;imshowpair(src,uint8(dst_affine_img),'montage');
title(['计算的仿射变换图像,耗时(s):',num2str(t_manual)])  

%% 插值处理
[index_i,index_j] = find(dst_affine_img);
for i = 1:size(dst_affine_img,1)
    for j = 1:size(dst_affine_img,2)
        [min_distance,index_near] = min(sqrt((i-index_i).^2+(j-index_j).^2));
        if dst_affine_img(i,j)==0 && min_distance<=1
            dst_affine_img(i,j) = dst_affine_img(index_i(index_near),index_j(index_near));
        end 
    end
end
figure; imshowpair(src,uint8(dst_affine_img),'montage');
title('插值后图像')





再看一个对点集的简单测试,T =  [1,1,0;2,1,0];

%% 坐标点的仿射变换
[pt_x,pt_y] = meshgrid(1:10);
pt_x = pt_x(:);
pt_y = pt_y(:);
figure;subplot(211);plot(pt_x,pt_y,'ro');grid on;
title('原始点集')
dst_pt = zeros(length(pt_x),2);
tf_affine = [1,1,0;2,1,0];
for i = 1:length(pt_x)
        dst = tf_affine*[pt_x(i),pt_y(i),1]';
        dst_pt(i,:) = [dst(1),dst(2)];
end
subplot(212);plot(dst_pt(:,1),dst_pt(:,2),'bo');grid on
title('仿射后点集')
reference:
https://ww2.mathworks.cn/help/images/ref/fitgeotrans.html?s_tid=srchtitle
数字图像基础【7】应用线性回归最小二乘法(矩阵版本)求解几何变换(仿射、透视) 应用线性回归最小二乘法(矩阵版本)求解几何变换(仿射、透视) 阅读详情

相关推荐

opencv图像仿射变换,cv2.warpAffine

仿射变换原理介绍 仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。 在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。 在opencv中就相当于是对图像的坐标进行操作(x,y),对坐标...

秃头披风侠的博客 1万+

仿射变换

简单来说,“仿射变换”就是:“线性变换”+“平移”。 1. 线性变换 线性变换有三个特点: 变换前是直线,变换后依然是直线; 直线比例保持不变 变换前是原点,变换后依然是原点 例如:旋转 例如:推移 旋转和推移叠加在一起也是线性变换: 1.1旋转是如何实现的 2. 仿射变换 仿射变换有两个特点: 变换前是直线,变换后依然是直线; 直线比例保持不变 少了原点保持不变这一条 例如:平移 平移不是线性变换,而是仿射变换。 2.1代数 把平移.

weixin_41107577的博客 2万+

计算机视觉基础-图像仿射变换

Task01 OpenCV框架与图像仿射变换一、仿射变换原理1.1仿射变换过程1.2坐标系与变换矩阵二、仿射变换的种类与特点2.1仿射变换种类2.2仿射变换特点2.3仿射变换相关函数仿射函数翻转函数缩放函数三、基于OpenCV的代码实现 一、仿射变换原理 1.1仿射变换过程 百度词条定义为: 仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。...

CleMints的博客 4089

MATLAB 仿射变换

首先,先简单介绍下仿射变换的基本原理。如下图,matlab中通过定义一个3×3的矩阵实现仿射变换(平移、缩放、旋转等)。注意到,变换矩阵的第三列恒为【0,0,1】,实际上,确定一个仿射变换只需要一个2×3的变换矩阵即可。matlab 仿射变换主要有三种常用形式。一:自定义变换矩阵xform = [ 1 0 0 ; 0 1 0 ; 40 40 1]; 在这个矩阵中,xform(3, 1)定义了图像在水

小小小富的博客 2万+

Comsol 弧形声学换能器声聚焦仿真

1. 弧度和曲率半径:弧形声学换能器的形状和曲率半径对声聚焦效果有重要影响。通常,较小的曲率半径和较大的弧度可以实现更强的声聚焦效果。弧形声学换能器声聚焦是指将声波能量集中在弧形声学换能器的特定区域内,以实现更强的声场强度和分辨率。4. 数值仿真和优化:使用声学仿真软件进行数值仿真可以帮助设计和优化弧形声学换能器的声聚焦效果。通过调整几何参数、材料特性和激励信号等参数,可以模拟和优化声聚焦效果。2. 激励信号:通过调整激励信号的频率和幅值,可以实现声波在弧形声学换能器中的聚焦效果。

声学黑洞仿真工作室 1617

基于VH6501的Busoff测试

摘要: 本文介绍使用VH6501和CANoe工具测试ECU的Busoff Recovery机制。通过干扰报文触发Busoff状态,验证快恢复(连续32次,间隔100ms)和慢恢复(间隔1000ms)的时序及次数是否符合要求。测试步骤包括硬件配置、干扰参数设置及Trace窗口错误帧分析,最终通过错误帧间隔判定恢复机制的正确性。

酒酿丸子的博客 1039

仿射变换OpenCV实现的最小二乘优化

仿射变换OpenCV实现的最小二乘优化 本函数只接受三个点的仿射变换,并不能处理样本点超过三个点、需要用最小二乘来找最接近的仿射变换的方式,所以笔者修改了本函数的实现,重新定义了一个如下:

lonelyrains的专栏 5060

STM32CubeIDE离线安装芯片PACK包全攻略(附离线包下载与导入步骤)

本文详细介绍了在STM32CubeIDE中离线安装芯片PACK包的完整流程,包括官方和第三方资源获取方法、本地安装步骤及常见问题解决方案。特别针对网络隔离环境下的嵌入式开发需求,提供了实用的版本管理和自动化部署技巧,帮助开发者高效完成芯片固件支持包的离线配置。

weixin_30825581的博客 300

图像仿射变换matlab,图像的仿射变换原理和实现

图像的仿射变换原理和实现发布时间:2018-05-06 01:03,浏览次数:1148仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。一般而言,仿射变换矩阵为2*3的矩阵,第三列的元素起着平移的作用,前面两列的数字对角线上是缩放,其余为旋转或者错切的作用。透视变换原理及实现请看我下篇博客 。设仿射变换矩阵T = [a11,a12,a13 ; a21,a22,a23]; 图像上fi...

weixin_29215391的博客 1575

嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南)

本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。

milk5的博客 900

国自然基金申请书撰写新思路:如何合理利用AI提高本子竞争力?

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。创新点、技术路线、前期基础,但是我们也可以把写好的初稿交给AI,让它扮演资深研究员,帮我们精炼表述、优化段落结构,并揪出可能被评审追问的逻辑漏洞。,我们需要的是让它帮我们理清楚思路,而不是让它替我们完成内容。

智能AI让学术科研更容易 664

opencv 仿射变换_python之图像仿射变换分析:原理+图像平移

前言这次梳理的篇幅主要是涉及图像仿射变换的原理以及图像平移,利用python编程实现不同方式的图像平移,对巩固自己的python知识也是很有帮助的,进一步的对图像处理的内容也是帮助很大的。但更多的是抛砖引玉,希望对你们有所帮助。感谢各位鼓励与支持,往期文章都在最后梳理出来了(●'◡'●)接下来就以问题的形式展开梳理仿射变换简介图像上的仿射变换,「其实就是图片中的一个像素点,通过某种变换,移动到另外...

weixin_39658726的博客 343

SAP Event Mesh 简介

Get Started with Messaging for Decoupled Communication Step 1: What is the SAP Event Mesh service? SAP Event Mesh 是一种完全托管的服务,用于连接应用程序、服务和系统,以便它们可以通过消息和事件相互交互。 它通过引入中央消息代理取代了传统的点对点通信。 虽然点对点通信适用于在有限数量的发送方和接收方之间共享数据,但可扩展性很快就会成为一个问题。 SAP Event Mesh 解决了这个问题,并确保

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1243

一文搞懂仿射变换

导读 在图像处理中,我们经常需要对图像进行各种操作如平移、缩放、旋转、翻转等,有时候我们还需要将图像投影到另一个平面来对图像做一些矫正,然而这些操作都与仿射变换和透视变换有着莫大的联系。通过本篇文章,你能够知道它们的实现原理以及如何应用它们,并且知道它们的适用场景。 仿射变换 仿射变换也称仿射投影,是指几何中,对一个向量空间进行线性变化并接上一个平移,变化为另一个向量空间。所以,仿射变换其实也就是...

修炼之路 2万+

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 150

图像处理中的仿射变换和透视变换

本篇文章主要用于记录图像处理中的仿射变换和透视变换原理和代码,以及在项目当中如何使用它们本文主要简单介绍了图像处理中的仿射变换和透视变换,以及如何使用裁剪出想要的区域。

qq_45754436的博客 1489

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

图像仿射变换之倾斜的python实现

如果您觉得本文对您有所帮助,请帮忙点赞,感谢! 一. 仿射变换算法原理: 仿射变换过程,(x,y)表示原图像中的坐标,(x',y')表示目标图像的坐标 ↑ 二. 仿射变换倾斜算法原理: 原图像大小为h*w X-sharing: 倾斜之x轴逆时针旋转tx度时的图像仿射变换公式 ↑ Y-sharing: 倾斜之y轴逆时针旋转ty度时的图像仿射变换公式...

Ibelievesunshine的博客 2160

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【C++ OpenCV】图像变换:连接、尺寸、翻转、旋转、仿射变换

​​​int main()Mat img = imread("E://学习//OPEN-CV学习//lena.png");cout

dagengen12138的博客 2520

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

图像预处理-翻转与仿射变换

参数指定翻转类型的标志,为0,表示沿x轴翻转,>0(默认1) 表示沿y轴翻转,为 <0(默认-1) 表示水平+垂直翻转。

Clocky7 907

OpenCV基础入门-图像预处理-图像仿射变换

摘要:仿射变换是一种保持直线性、平行性和比例关系的二维线性变换,包括旋转、平移、缩放和剪切等操作。其数学原理通过3×3变换矩阵实现,OpenCV提供cv2.warpAffine()函数进行实现,配合cv2.getRotationMatrix2D()或自定义矩阵完成各类变换。该技术在图像处理中具有重要作用,能灵活调整图像并标准化输入,理解其原理有助于参数调试和问题解决。建议从基础变换入手,逐步掌握组合变换技巧。(150字)

LU_MING_DENG的博客 1061

np维度变换_python之图像仿射变换分析:原理+图像平移

前言这次梳理的篇幅主要是涉及图像仿射变换的原理以及图像平移,利用python编程实现不同方式的图像平移,对巩固自己的python知识也是很有帮助的,进一步的对图像处理的内容也是帮助很大的。但更多的是抛砖引玉,希望对你们有所帮助。感谢各位鼓励与支持,往期文章都在最后梳理出来了(●'◡'●)接下来就以问题的形式展开梳理仿射变换简介图像上的仿射变换,「其实就是图片中的一个像素点,通过某种变换,移动到另外...

weixin_42296571的博客 477

Javascript图像处理——仿射变换

前言 上一篇文章,我们讲解了图像金字塔,这篇文章我们来了解仿射变换。   仿射?! 任何仿射变换都可以转换成,乘以一个矩阵(线性变化),再加上一个向量(平移变化)。 实际上仿射是两幅图片的变换关系。 例如我们可以通过仿射变换对图片进行:缩放、旋转、平移等操作。   一个数学问题 在解决仿射问题前,我们来做一个数学题。 如图,对于点(x1, y1),相对于原点旋转一个角度...

掬水月在手,弄花香满衣 296

三维错切变换矩阵_图像的仿射变换

目录:概述图像基本变换仿射变换原理python实现一、概述图像的几何变换主要包括:平移、缩放、旋转、仿射、透视等等。图像变换是建立在矩阵运算基础上的,通过矩阵运算可以很快的找到不同图像的对应关系。理解变换的原理需要理解变换的构造方法以及矩阵的运算方法。图像的几何变换主要分为三类:刚性变换、仿射变换和透视变换,如下图: 仿射变换是从一个二维坐标系变换到另一个二维坐标系,属于线性变换。通过已知3对坐标...

weixin_39931362的博客 914

opencv 仿射变换_一文搞懂仿射变换

导读在图像处理中,我们经常需要对图像进行各种操作如平移、缩放、旋转、翻转等,这些操作都属于图像的仿射变换,我们通过一个变换矩阵就能很容易的实现。本篇文章详细的介绍了各种操作的实现原理,以及代码的实现和使用仿射变换仿射变换也称仿射投影,是指几何中,对一个向量空间进行线性变换并接上一个平移,变换为另一个向量空间。所以,仿射变换其实也就是在讲如何来进行两个向量空间的变换假设有一个向量空间k:和...

weixin_39905500的博客 727

图像到图像的映射-仿射变换的应用-图像扭曲实例

图像到图像的映射-仿射变换的应用-图像扭曲实例1. 原理2.代码实现 1. 原理 单应性变换: 单应变换矩阵是一个3*3的矩阵H。这个变换可以被任意乘上一个非零常数,而不改变变换本身。所以它虽然具有9个元素,但是具有8个自由度。这意味这它里面有8个未知参数待求。 仿射变换 仿射变换:(Affine Transformation 或Affine Map)是一种二维坐标(x, y)到二维坐标(u, ...

CAnCErWu的博客 1297
上一篇: 人脸属性标注工具
下一篇: 图像透视变换原理及实现
The_Matrix_
博客等级 码龄14年 340粉丝 33原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值