图像特征之傅里叶描述子
使用C++、opencv获取轮廓的傅里叶描述子
傅里叶描述子是一种图像特征,具体来说,是一个用来描述轮廓的特征参数。其基本思想是用物体边界信息的傅里叶变换作为形状特征,将轮廓特征从空间域变换到频域内,,提取频域信息作为图像的特征向量。即用一个向量代表一个轮廓,将轮廓数字化,从而能更好地区分不同的轮廓,进而达到识别物体的目的。
关于傅里叶描述子的概述可参考论文(http://www.doc88.com/p-7176387138708.html)的2.3节。
在冈萨雷斯的《数字图象处理》一书中介绍了傅里叶描述子的详细原理:
总结:傅立叶描述子可以很好地描述轮廓特征,并且只需少量的描述子(即向量中的数不需要太多)即可大致代表整个轮廓。其次,对傅立叶描述字进行简单的归一化操作后,即可使描述子具有平移、旋转、尺度不变性,即不受轮廓在图像中的位置、角度及轮廓的缩放等影响,是一个鲁棒性较好的图像特征。
注:代码适用于物体已大致分割出来,并且图像中只存在1个目标物体的情况,其他情况需要视需求改代码。
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>using namespace cv;
using namespace std;int main()
{//读取图像Mat src_image = imread("D:\\4.PNG");//图像读取出错处理if (!src_image.data){cout << "src image load failed!" << endl;return -1;}//显示源图像namedWindow("原图", WINDOW_NORMAL);imshow("原图", src_image);//此处高斯去燥有助于后面二值化处理的效果//Mat blur_image;//GaussianBlur(src_image, blur_image, Size(15, 15), 0, 0);//imshow("GaussianBlur", blur_image);/*灰度变换与二值化*/Mat gray_image, binary_image;cvtColor(src_image, gray_image, COLOR_BGR2GRAY);threshold(gray_image, binary_image, 30, 255, THRESH_BINARY | THRESH_TRIANGLE);imshow("binary", binary_image);/*形态学闭操作*/Mat morph_image;Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));morphologyEx(binary_image, morph_image, MORPH_CLOSE, kernel, Point(-1, -1), 2);imshow("morphology", morph_image);/*查找外轮廓*/vector< vector<Point> > contours;vector<Vec4i> hireachy;findContours(binary_image, contours, hireachy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE, Point());int l;//目标轮廓索引//寻找最大轮廓,即目标轮廓for (size_t t = 0; t < contours.size(); t++){/*过滤掉小的干扰轮廓*/Rect rect = boundingRect(contours[t]);if (rect.width < src_image.cols / 2)continue;//if (rect.width >(src_image.cols - 20))l = t;//找到了目标轮廓,获取轮廓的索引}//画出目标轮廓Mat result_image = Mat::zeros(src_image.size(), CV_8UC3);vector< vector<Point> > draw_contours;draw_contours.push_back(contours[l]);drawContours(result_image, draw_contours, -1, Scalar(255,255,255), 1, 8, hireachy);namedWindow("lunkuo", WINDOW_NORMAL);imshow("lunkuo", result_image);//计算轮廓的傅里叶描述子Point p;int x, y, s;int i = 0,j = 0,u=0;s = (int)contours[l].size();Mat src1(Size(s,1),CV_8SC2);float f[9000];//轮廓的实际描述子float fd[16];//归一化后的描述子,并取前15个for (u = 0; u < s; u++){float sumx=0, sumy=0;for (j = 0; j < s; j++){p = contours[l].at(j);x = p.x;y = p.y;sumx += (float)(x*cos(2*CV_PI*u*j/s) + y*sin(2 * CV_PI*u*j / s));sumy+= (float)(y*cos(2 * CV_PI*u*j / s) - x*sin(2 * CV_PI*u*j / s));}src1.at<Vec2b>(0, u)[0] = sumx;src1.at<Vec2b>(0, u)[1] = sumy;f[u] = sqrt((sumx*sumx)+(sumy*sumy));}//傅立叶描述字的归一化f[0] = 0;fd[0] = 0;for (int k = 2; k < 17; k++){f[k] = f[k] / f[1];fd[k - 1] = f[k];cout << fd[k-1] << endl;}//保存数据for (int k = 0; k < 16; k++){FILE *fp = fopen("1.txt", "a");fprintf(fp, "%8f\t", fd[k]);fclose(fp);}FILE *fp = fopen("1.txt", "a");fprintf(fp, "\n");fclose(fp);waitKey();return 0;
}
源图像:
二值化图像、轮廓图:
将源图像进行旋转、放大操作后的图像:
二值化图像、轮廓图:
两次得到的傅里叶描述子向量如下所示:
可以看到两次得到的向量的对应元素值还是很相近的。
图像特征之傅里叶描述子相关推荐
- 傅里叶描述子、HOG特征描述子原理及matlab代码
一.傅里叶描述子 傅里叶描述子的作用是用来描述图像的轮廓信息,具有平移.旋转.尺度不变性特征. 对于一幅图像,通过傅里叶描述子获得其图像轮廓信息,其本质就是空间.频域变换问题.通过将图像中的像素点进行 ...
- OpenCV实现傅里叶描述子(下): 形状特征提取
简述 在前面的更新中 OpenCV实现傅里叶描述子(上): 边界重建 有简单介绍了一下傅里叶描述子的内容,并利用边界的傅里叶描述子对其进行重建,使边界变得更加的平滑.但傅里叶描述子还是以其作为图像中形 ...
- image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍
介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...
- 图像特征描述子(一)——HOG
本文主要参考博客:1.https://www.cnblogs.com/panchuangai/p/12567973.html 2.https://blog.csdn.net/weixin_383678 ...
- 图像特征点及特征描述子总结
参考博客 https://blog.csdn.net/qq_28193895/article/details/80845803 https://blog.csdn.net/u013989576/art ...
- 图像特征描述子之BRISK
原文站点:https://senitco.github.io/2017/07/12/image-feature-brisk/ BRISK(Binary Robust Invariant Scala ...
- SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析
图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...
- 图像特征点—SIFT特征点
图像特征点-SIFT特征点 关于SIFT特征点,以下三篇博客说的非常详细,再次不再赘述. https://mp.weixin.qq.com/s/XVB88f119gRqpwTTRvTyrA https ...
- 图像特征点检测与匹配评价准则——量化
欢迎转载,转载请注明出处,谢谢! 目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harris.SIFT.SURF.ORB等等,不同的特征点检测和匹配方法尤其独特的优势和不足: ...
最新文章
- 关于C和C++的一点观点
- firefox加载不来
- Conv2d中的groups参数(分组卷积)怎么理解? 【分组卷积可以减少参数量、且不容易过拟合(类似正则化)】
- 【三维深度学习】多视角立体视觉模型R-MVSNet
- Oracle定时任务
- Struts2前身Struts1是如何转起来的呢
- postfix 过滤中文内容
- 读《JavaScript权威指南》笔记(三)--对象
- spring security3.x学习(3)_初探过滤器机制和auto-config用法
- 计算机二级2018VB题库百度云,计算机二级vb题库2017
- 情人节程序员用HTML网页表白【表白对话】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
- vuex的commit和dispatch
- 360怎样修改wifi服务器,360路由器怎么设置无线网络
- Jetson TK1 血泪开发记(一)——Jetson TK1初体验
- 2019阿里秋招一道笔试题(关于火柴拼出最大数字) - Android开发岗
- 群晖6.2开启shr格式
- linux查看图形化系统版本,查看 Linux 系统版本信息
- 百度博客搜索悄然上线
- leetCode1047
- 【小程序】如何解决小程左滑删除功能ios的橡皮筋回弹