opencv离散傅里叶变换进行图像旋转校正
前言
离散傅立叶变换的一个应用是决定图片中物体的几何方向。
观察这两张幅度图你会发现频域的主要内容(幅度图中的亮点)是和空间图像中物体的几何方向相关的。 通过这点我们可以计算旋转角度并修正偏差。
官网:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html#discretfouriertransform
一直以来跟傅里叶变换打交道,以前看了那么多长篇、课本式介绍,这次看到官网上对傅里叶变换的阐述,觉得很清晰,忍不住想再复述一遍。
原理
对一张图像使用傅立叶变换就是将它分解成正弦和余弦两部分。也就是将图像从空间域(spatial domain)转换到频域(frequency domain)。 这一转换的理论基础来自于以下事实:任一函数都可以表示成无数个正弦和余弦函数的和的形式。傅立叶变换就是一个用来将函数分解的工具。 2维图像的傅立叶变换可以用以下数学公式表达:
式中 f 是空间域(spatial domain)值, F 则是频域(frequency domain)值。 转换之后的频域值是复数, 因此,显示傅立叶变换之后的结果需要使用实数图像(real image) 加虚数图像(complex image), 或者幅度图像(magitude image)加相位图像(phase image)。 在实际的图像处理过程中,仅仅使用了幅度图像,因为幅度图像包含了原图像的几乎所有我们需要的几何信息。 然而,如果你想通过修改幅度图像或者相位图像的方法来间接修改原空间图像,你需要使用逆傅立叶变换得到修改后的空间图像,这样你就必须同时保留幅度图像和相位图像了。
参考官网的代码就可以实现如下效果:
进行检测直线对倾斜的图片(上图倾斜的lena)进行校正
参考博客:http://johnhany.net/2013/11/dft-based-text-rotation-correction/
就像博主说的,其中二值化阈值参数GRAY_THRES 和霍夫变换检测一条直线所需的最少曲线交点的参数 HOUGH_VOTE,要手动调节,不同的图像需要设置不同的参数,分别测试三种,一种上图1,先旋转之后再校正,但是出来结果是如下这样,设置旋转的角度是27,检测直线之后计算出来的是63,是互余的关系,可是怎么也调不正
第二种,就是上图2的结果,虽然校正回来了,但是我是在最后校正回来的角度那里减去90度才得到的
第三种,就是像博主那样用文本图像,是可以校正回来的
博主@ JohnHany 也说到倾斜角度(与竖直方向的夹角)根据角度在[0,90]和 [90,180]会有不同,以及opencv,逆时针方向为正,不过目前我脑袋里仍然是一片混乱,此问题暂时放在这里吧,欢迎广大博友帮忙解惑!
opencv离散傅里叶变换进行图像旋转校正相关推荐
- OpenCV 离散傅里叶变换
离散傅里叶变换(DFT) 定义 离散傅里叶变换(Discrete Fourier Transform,缩写为DFT),是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DFT的频域采样 ...
- OpenCV基础篇——图形图像旋转
以前在做图像处理的时候用到了图像的旋转,opencv自带的flip函数只能180度,因为需要旋转任意角度,顺时针和逆时针的情况,所以去找了些效果比较好的函数来实现.网上有的旋转函数有内存泄露的现象,现 ...
- 独家|OpenCV 1.7 离散傅里叶变换
翻译:陈之炎 校对:李海明本文约2400字,建议阅读5分钟本文为大家介绍了OpenCV离散傅里叶变换. 目标 本小节将寻求以下问题的答案: 什么是傅立叶变换,为什么要使用傅立叶变换? 如何在OpenC ...
- 数字图像处理学习笔记 离散傅里叶变换
一.一维离散傅里叶变换 1.离散傅里叶变换理论 2.傅里叶变换的矩阵形式(内积需要共轭,所以会存在负号) 3.DFT矩阵 4.DFT转置(H表示既要转置也要取共轭) 5.DFT合成 6.傅里叶变换的例 ...
- Opencv 实现图像的离散傅里叶变换(DFT)、卷积运算(相关滤波)
原文:http://blog.csdn.net/ikerpeng/article/details/41845545?utm_source=tuicool&utm_medium=referral ...
- Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换
问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值. 代码运行结果: 代码: clc; clear all; I= ...
- 基于OpenCV完成离散傅里叶变换
基于OpenCV完成离散傅里叶变换 目标 学会使用函数: cv::copyMakeBorder() , cv::merge() , cv::dft() , cv::getOptimalDFTSize( ...
- 【OpenCV 例程200篇】72. 一维离散傅里叶变换
[OpenCV 例程200篇]72. 一维离散傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 1.3 一维 ...
- 2.2 获取图像感兴趣区域_基于Hu距的图像旋转矫正之OpenCV实现
目录 1.常见图像旋转矫正方法 1.1 基于图像边缘轮廓的旋转矫正 1.2 基于傅里叶变换以及霍夫直线检测的旋转矫正 2.基于Hu距图像旋转矫正 2.1 Hu旋转不变性 2.2 实现步骤 2.2.1 ...
最新文章
- python123 https://github.com/jackfrued/Python-100-Days/tree/master/Day01-15
- 关于Cocos2d-x中对其他某个类的某个属性的获得
- VSCode中experimentalDecorators设置问题
- Android中进程与线程
- java netty聊天室_netty实现消息中心(二)基于netty搭建一个聊天室
- Linux shell创建空文件(0字节大小)文件方法
- cxTreeList 控件说明
- xmlhttp资料(收集)
- Mybatis缓存机制及mybatis的各个组成部分
- 快递查询接口-快递鸟对接方案
- OkHttp3 (二)——请求
- 【JTAG、SBW、BSL】MSP430的BSL
- linux /home recovering journal,启动Ubuntu时出现 /dev/sda2 clean 和 /dev/sda2 recovering journal 现象的解决办法...
- endnote导入知网文献
- mysql的时区设置
- PS-TS-PES-ES流结构分析
- 北邮考研复试机试准备过程(已上岸)
- 从自然科学基金项目申请看科学问题的凝练 (陈越 等)
- android 文本阅读,如何在Android中阅读文本文件?
- 一个老工程师的心理话(转)