matlab练习程序(倾斜校正,透视变换)

  过去也写过透视变换,当时算法真是弱爆了,我竟然会通过两次变换。不过那引用的三篇文章都是非常好的文章,直到今天我才看明白。所谓的倾斜校正,一定要有标定点,将一个倾斜的矩形变为不倾斜的。因此可以从原四边形四个点和新矩形四个点得到一个变换矩阵,根据这个矩阵再作用到全局图像就可以了。详细原理在这里,MIT的,我也不会比他介绍的更好了,还是看原版的好。

  我这里的代码完全就是按照MIT那篇文章的原理实现的,不过因为Matlab细节的原因,我把公式中x和y位置互换了:

clear all;
close all;
clc;img= imread('rect.bmp');
img= rgb2gray(img);
imshow(mat2gray(img));
[M N] = size(img);dot=ginput();       %取四个点,依次是左上,右上,左下,右下,这里我取的是书的四个角
w=round(sqrt((dot(1,1)-dot(2,1))^2+(dot(1,2)-dot(2,2))^2));     %从原四边形获得新矩形宽
h=round(sqrt((dot(1,1)-dot(3,1))^2+(dot(1,2)-dot(3,2))^2));     %从原四边形获得新矩形高y=[dot(1,1) dot(2,1) dot(3,1) dot(4,1)];        %四个原顶点
x=[dot(1,2) dot(2,2) dot(3,2) dot(4,2)];%这里是新的顶点,我取的矩形,也可以做成其他的形状
%大可以原图像是矩形,新图像是从dot中取得的点组成的任意四边形.:)
Y=[dot(1,1) dot(1,1) dot(1,1)+h dot(1,1)+h];
X=[dot(1,2) dot(1,2)+w dot(1,2) dot(1,2)+w];B=[X(1) Y(1) X(2) Y(2) X(3) Y(3) X(4) Y(4)]';   %变换后的四个顶点,方程右边的值
%联立解方程组,方程的系数
A=[x(1) y(1) 1 0 0 0 -X(1)*x(1) -X(1)*y(1);             0 0 0 x(1) y(1) 1 -Y(1)*x(1) -Y(1)*y(1);x(2) y(2) 1 0 0 0 -X(2)*x(2) -X(2)*y(2);0 0 0 x(2) y(2) 1 -Y(2)*x(2) -Y(2)*y(2);x(3) y(3) 1 0 0 0 -X(3)*x(3) -X(3)*y(3);0 0 0 x(3) y(3) 1 -Y(3)*x(3) -Y(3)*y(3);x(4) y(4) 1 0 0 0 -X(4)*x(4) -X(4)*y(4);0 0 0 x(4) y(4) 1 -Y(4)*x(4) -Y(4)*y(4)];fa=inv(A)*B;        %用四点求得的方程的解,也是全局变换系数
a=fa(1);b=fa(2);c=fa(3);
d=fa(4);e=fa(5);f=fa(6);
g=fa(7);h=fa(8);rot=[d e f;a b c;g h 1];        %公式中第一个数是x,Matlab第一个表示y,所以我矩阵1,2行互换了pix1=rot*[1 1 1]'/(g*1+h*1+1);  %变换后图像左上点
pix2=rot*[1 N 1]'/(g*1+h*N+1);  %变换后图像右上点
pix3=rot*[M 1 1]'/(g*M+h*1+1);  %变换后图像左下点
pix4=rot*[M N 1]'/(g*M+h*N+1);  %变换后图像右下点

height=round(max([pix1(1) pix2(1) pix3(1) pix4(1)])-min([pix1(1) pix2(1) pix3(1) pix4(1)]));     %变换后图像的高度
width=round(max([pix1(2) pix2(2) pix3(2) pix4(2)])-min([pix1(2) pix2(2) pix3(2) pix4(2)]));      %变换后图像的宽度
imgn=zeros(height,width);delta_y=round(abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])));            %取得y方向的负轴超出的偏移量
delta_x=round(abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])));            %取得x方向的负轴超出的偏移量
inv_rot=inv(rot);for i = 1-delta_y:height-delta_y                        %从变换图像中反向寻找原图像的点,以免出现空洞,和旋转放大原理一样for j = 1-delta_x:width-delta_xpix=inv_rot*[i j 1]';       %求原图像中坐标,因为[YW XW W]=fa*[y x 1],所以这里求的是[YW XW W],W=gy+hx+1;pix=inv([g*pix(1)-1 h*pix(1);g*pix(2) h*pix(2)-1])*[-pix(1) -pix(2)]'; %相当于解[pix(1)*(gy+hx+1) pix(2)*(gy+hx+1)]=[y x],这样一个方程,求y和x,最后pix=[y x];if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=M && pix(2)<=Nimgn(i+delta_y,j+delta_x)=img(round(pix(1)),round(pix(2)));     %最邻近插值,也可以用双线性或双立方插值end  end
endfigure;
imshow(uint8(imgn));

程序效果:

原图,这是本不错的书

倾斜校正后

将来说不定结合sift算子和霍夫变换就能自动校正呢。

注:博客园有Bug,当你点代码左下角复制代码的时候,矩阵A的2,4,6,8行第一列会少复制一个0.

另一篇关于投影的文章见这里。

matlab练习程序(倾斜校正,透视变换)相关推荐

  1. matlab 图像透视变换矩阵,[转载]图像倾斜校正、透视变换  MATLAB

    过去也写过透视变换,当时算法真是弱爆了,我竟然会通过两次变换.不过那引用的三篇文章都是非常好的文章,直到今天我才看明白.所谓的倾斜校正,一定要有标定点,将一个倾斜的矩形变为不倾斜的.因此可以从原四边形 ...

  2. matlab 倾斜矫正,matlab图像倾斜校正

    4 图像颜色畸变校正介绍图像颜色畸变现象可以是由摄像器材导致,也可以是由于真实环境本身就偏 色导致,还有的是由于图像放置过久氧化.老化导致.无论其产生的原因如何, 其校正方法都是类似的.如果用 Mat ...

  3. 基于AlexNet卷积神经网络的手写体数字倾斜校正系统研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.AlexNet 网络 ✳️ 三.实验验证 ✳️ 3.1 实验数据集 ✳️ 3.2 数据训练 ✳️ 3.3 手写体倾斜数字校正结果 ✳️ 四.参考文献 ✳️ ...

  4. MATLAB基于Randon变换的图像倾斜校正算法及实现

    Radon变换的基本原理: 一个平面内沿不同的直线(直线与原点的距离为d,方向角为alfa)对f(x,y)做线积分,得到的像F(d,alfa)就是函数f的Radon变换.也就是说,平面(d,alfa) ...

  5. python.freelycode.com-通过OpenCV和Python进行文本倾斜校正

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 本文所展示的是一个由Pyhton实现的文本倾斜校正的脚本,在实现中使用到了OpenCV和Python的图像 ...

  6. matlab期权风险评估算法,使用 MATLAB 应用程序根据期权价格估算风险中性密度 (risk-neutral density, RND)...

    我们为什么选择 MATLAB 我们决定创建 MATLAB 应用程序估算 RND,因为我们希望研究成果得到广泛应用,而不是仅限于在量化经济学领域或是熟悉 MATLAB 编程的和金融研究人员使用. 我们发 ...

  7. 图像倾斜校正 Radon 变换原理及函数

    radon校正 Radon(拉东)算法是一种通过定方向投影叠加,找到最大投影值时角度,从而确定图像倾斜角度的算法.具体过程如图所示 拉东变换 若函数F表示一个未知的密度,对F做radon变换,相当于得 ...

  8. 频域串联滞后校正matlab,控制工程基础(基于Matlab的线性系统串联校正)

    <控制工程基础(基于Matlab的线性系统串联校正)>由会员分享,可在线阅读,更多相关<控制工程基础(基于Matlab的线性系统串联校正)(16页珍藏版)>请在人人文库网上搜索 ...

  9. matlab密度特征,关于用MATLAB应用程序估算风险中性密度的性能分析和介绍

    由于场外期权合约的买卖在交易双方间私下进行而非通过公开市场,因而可能很难确定合约的价格有利于买方还是卖方.为对这些合约进行定价,金融分析师往往依据看涨期权或看跌期权价格估算出风险中性密度(RND)值. ...

  10. 扫描图像二维码抠图(倾斜校正 去黑边)

    扫描图像二维码抠图(倾斜校正 去黑边) 时间:2016-05-06 16:23:15      阅读:1459      评论:0      收藏:0      [点我收藏+] 标签:des   算法 ...

最新文章

  1. 网站漏洞扫描工具Uniscan
  2. linux shell ls 列出文件绝对路径
  3. 阅读笔记一——java高并发的性能优化
  4. Intel Media SDK H264 encoder GOP setting
  5. 【图像处理】——Python实现图像加噪(随机噪声、椒盐噪声、高斯噪声等)
  6. google code for xbmc addons2
  7. Android之日期时间选择器使用方法
  8. php 逗号编码,php有几种编码
  9. JAVA-JSP内置对象之application对象获得其他信息
  10. 第三方服务-极光推送
  11. 前端面试题集锦(二)之CSS部分
  12. Python发布 - distutils简单使用
  13. 5E7月3号服务器在维护,5E对战平台西南服务器上线!全新S2赛季即将开启
  14. 【ValueError: data type <class ‘numpy.object_‘> not inexact】
  15. 2014年9月至2015年1月
  16. 2016年9个最受欢迎的H5页面制作工具
  17. Word文档加密器(最新版V6.0)
  18. Mysql RR级别下如何解决幻读
  19. 解除封闭、寒假延长!多校发通知!
  20. 时空旅行[线段树分治][维护凸壳]

热门文章

  1. 数据结构——>顺序存储二叉树
  2. 计算机组成原理 多级中断,计算机组成原理的大神们能不能帮忙做几道题啊
  3. js获取html中type属性,JavaScript获取节点类型、节点名称和节点值
  4. (秒杀项目) 4.7 缓存商品与用户
  5. redis面试常问--缓存穿透
  6. java菜单如何点解_解读java菜单
  7. python爬虫如何连接数据库_Python爬虫框架和数据库连接
  8. 实战CSS:模拟登录注册静态实现
  9. Python:如何发布自己的模块
  10. RDMA(远程直接数据存取)概述