OpenCV中phase函数计算方向场

本文涉及的产品
简介: 一、函数原型​该函数参数angleInDegrees默认为false,即弧度,当置为true时,则输出为角度。phase函数根据函数来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0。
一、函数原型

​该函数 参数 angleInDegrees 默认为false,即弧度,当置为true时,则输出为角度。
phase函数根据函数 来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0。
数学上函数atan2为:

该函数的值域为可以通过对负数结果加的方法,将函数的结果映射到范围内。

而c++中atan2函数是通过正切值返回弧度的,并通过判断x,y的正负决定象限,因此c++中atan2函数值域是从-Pi到Pi的。

 

二、小实验

Mat mat1(Size( 4 , 1 ), CV_32FC1), mat2(Size( 4 , 1 ), CV_32FC1), mat3;
mat1.at < float > ( 0 , 0 ) = 1 ;  mat2.at < float > ( 0 , 0 ) = 1 ;
mat1.at < float > ( 0 , 1 ) = 1 ;  mat2.at < float > ( 0 , 1 ) = - 1 ;
mat1.at < float > ( 0 , 2 ) = - 1 ; mat2.at < float > ( 0 , 2 ) = 1 ;
mat1.at < float > ( 0 , 3 ) = - 1 ; mat2.at < float > ( 0 , 3 ) = - 1 ;
phase(mat1,mat2,mat3, true );

 

最后mat3的计算结果:。由此可以看出opencv phase计算出的角度从0°-360°是已x轴正方向为0°,逆时针旋转增加,符合我们平常角度的计算方式。

 

三、实际运用

使用函数来计算图像方向场

原始图像

代码    

 //变量

    Mat img = cv::imread"e:/template/***。png",0); 
    Mat grad1,grad2,angle;
    Sobel(imggrad1CV_64FC1, 1, 0); //求梯度
    Sobel(imggrad2CV_64FC1, 0, 1);
    blur(grad1,grad1,Size(6,6));
    blur(grad2,grad2,Size(6,6));
    phase(grad1grad2angletrue); //求角度
    normalize(angleangle, 0, 255, NORM_MINMAX); //归一化 方便显示,和实际数据没有关系
    angle.convertTo(angle,CV_8UC1);
    

说明

在进行角度计算之前,对sobel计算的两个结果分别进行了6*6的平均卷积,这是基本的去噪思路。而后到phase一行,角度就已经求出来了,后面是为了方便显示。

注意,这里的角度是以x正方向为0,以逆时针为正方向,0-360的度量。并且显而易见分了内外。这个圆是比较简单的,如果对于复杂图像,就必须对角度的概念有深入理解。

 

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
资源调度 算法 计算机视觉
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
623 0
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
|
4月前
[C++&OpenCv] 两点距离、三点角度的计算
[C++&OpenCv] 两点距离、三点角度的计算
34 0
|
11月前
|
机器学习/深度学习 数据采集 算法
迁移学习「求解」偏微分方程,条件偏移下PDE的深度迁移算子学习(1)
迁移学习「求解」偏微分方程,条件偏移下PDE的深度迁移算子学习
|
11月前
|
机器学习/深度学习
迁移学习「求解」偏微分方程,条件偏移下PDE的深度迁移算子学习(2)
迁移学习「求解」偏微分方程,条件偏移下PDE的深度迁移算子学习
107 0
|
存储 编解码 数据可视化
飞桨常规赛:PALM眼底彩照中黄斑中央凹定位
飞桨常规赛:PALM眼底彩照中黄斑中央凹定位
飞桨常规赛:PALM眼底彩照中黄斑中央凹定位
|
机器学习/深度学习 算法 Docker
千字好文,基于未采样GraphSage算子和DGL实现的图上 Edge 回归
千字好文,基于未采样GraphSage算子和DGL实现的图上 Edge 回归
|
机器学习/深度学习 算法 自动驾驶
实战教程 | 车道线检测项目实战,霍夫变换 & 新方法 Spatial CNN
在某些情况下,直接调用已经搭好的模型可能是非常方便且有效的,比如Caffe、TensorFlow工具箱,但这些工具箱需要的硬件资源比较多,不利于初学者实践和理解。因此,为了更好的理解并掌握相关知识,最好是能够自己编程实践下。本文将展示计算机时如何识别车道线的。
实战教程 | 车道线检测项目实战,霍夫变换 & 新方法 Spatial CNN
|
编解码 区块链
Google Earth Engine——WWF/HydroSHEDS/15DIR该数据集的分辨率为15弧秒。15角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。
Google Earth Engine——WWF/HydroSHEDS/15DIR该数据集的分辨率为15弧秒。15角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。
149 0
Google Earth Engine——WWF/HydroSHEDS/15DIR该数据集的分辨率为15弧秒。15角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。
|
编解码 区块链
Google Earth Engine——WWF/HydroSHEDS/30DIR该数据集的分辨率为30弧秒。30角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。1km分辨率DEM
Google Earth Engine——WWF/HydroSHEDS/30DIR该数据集的分辨率为30弧秒。30角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。1km分辨率DEM
121 0
Google Earth Engine——WWF/HydroSHEDS/30DIR该数据集的分辨率为30弧秒。30角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。1km分辨率DEM
|
编解码 区块链
Google Earth Engine——WWF/HydroSHEDS/30ACC该数据集的分辨率为30弧秒。30角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。
Google Earth Engine——WWF/HydroSHEDS/30ACC该数据集的分辨率为30弧秒。30角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。
143 0
Google Earth Engine——WWF/HydroSHEDS/30ACC该数据集的分辨率为30弧秒。30角秒的数据集是水文条件下的DEM、排水(流)方向和流量累积。