1. 程式人生 > >學習OpenCV——Gabor函式的應用

學習OpenCV——Gabor函式的應用

注:在我的資源中有改進過的cvgabor類

它有如下的功能:

生成特定方向和尺度的gabor

生成可以顯示或者儲存的gabor核的實部,虛部

影象的實部,虛部或者主要(Magnitude)響應

響應可以儲存在XML檔案中

#include "cvgabor.h"
int main(){

	//建立一個方向是PI/4而尺度是3的gabor
	double Sigma = 2*PI;  
	double F = sqrt(2.0);  
	CvGabor *gabor1 = new CvGabor;  
	gabor1->Init(PI/4, 3, Sigma, F);
	
	//獲得實部並顯示它
	IplImage *kernel = cvCreateImage( cvSize(gabor1->get_mask_width(), gabor1->get_mask_width()), IPL_DEPTH_8U, 1);
	kernel = gabor1->get_image(CV_GABOR_REAL);
	cvNamedWindow("Gabor Kernel", 1);
	cvShowImage("Gabor Kernel", kernel);
	cvWaitKey(0);

	//載入一個影象並顯示
	IplImage *img = cvLoadImage( "D:/Demo.jpg", CV_LOAD_IMAGE_GRAYSCALE );
	cvNamedWindow("Original Image", 1);
	cvShowImage("Original Image", img);
	cvWaitKey(0);

	//獲取載入影象的gabor濾波響應的實部並且顯示
	IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
	gabor1->conv_img(img, reimg, CV_GABOR_REAL);
	cvNamedWindow("Real Response", 1);
	cvShowImage("Real Response",reimg);
	cvWaitKey(0);
	cvDestroyWindow("Real Response");

	//獲取載入影象的gabor濾波響應的虛部並且顯示
//	IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
	gabor1->conv_img(img, reimg, CV_GABOR_IMAG);
	cvNamedWindow("Imaginary Response", 1);
	cvShowImage("Imaginary Response",reimg);
	cvWaitKey(0);
	cvDestroyWindow("Imaginary Response");

	//獲取載入影象的gabor濾波響應的模並且顯示
//	IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
	gabor1->conv_img(img, reimg, CV_GABOR_MAG);
	cvNamedWindow("Magnitude Response", 1);
	cvShowImage("Magnitude Response",reimg);
	cvWaitKey(0);
	cvDestroyWindow("Magnitude Response");

	/*
	//這個響應可以被取樣為8位的灰度圖。如果你要原始的浮點型別的資料,你可以這樣做
	IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_32F, 1);
	gabor1->conv_img(img, reimg, CV_GABOR_MAG);
	//然而,這些浮點資料是不能夠以上面灰度圖的形式簡單的顯示,但是它可以被儲存在一個XML檔案中。
	cvSave( "reimg.xml", (IplImage*)reimg, NULL, NULL, cvAttrList(0,0));
	*/



}


概念:

1.關於小波變換:

一種多解析度分析工具,為不同尺度上訊號的的分析和表徵提供了精確和統一框架。它的原理是來源於Fourier變換!但是它比傳統的Fourier變換有更多優點,比如:

1)小波變換可以覆蓋整個頻域;
2)可以通過選取合適濾波器,減少或除去提取的不同特徵之間的相關性;
3)具有變焦特性,低頻段可用高頻率解析度和低時間解析度,在高頻段可用低頻率解析度和高時間解析度
4)小波變換在實現上有快速演算法(Mallat小波分析演算法)。

提到小波變換必須提到小波函式,簡單的說,積分為0的函式都可以作為小波函式,還可以通過一系列變化得到連續的小波變換式。
小波變換適用小波函式族及其相應的尺度函式將原始訊號分解成不同的頻帶。一般所說的小波變換僅遞迴分解訊號的低頻部分,以生成下一尺度的各頻道輸出。層層分解(圖片不附了),這樣的分解通常稱為金字塔結構小波變換。

如果不僅僅對低通濾波器輸出進行遞迴分解,而且也對高通濾波器的輸出進行遞迴分解,則稱之為小波包分解。(樹狀的圖形)
小波變換具有良好的時頻區域性化、尺度變換和方向特徵,是分析紋理的有力工具。


2.Gabor 變換

根據模擬人類視覺系統而產生。通過模擬人類視覺系統,可以將視網膜成像分解成一組濾波影象,每個分解的影象能夠反映頻率和方向在區域性範圍內的強度變化。通過一組多通道Gabor濾波器,可以獲得紋理特徵。
Gabor變換的根本就是Gabor濾波器的設計,而濾波器的設計又是其頻率函式(U,V)和Gauss函式引數(一個)的設計。實際上,Gabor變換是為了提取訊號Fourier變換的區域性資訊,使用了一個Gauss函式作為窗函式,因為一個Gauss函式的Fourier變換還是一個Gauss函 數,所以Fourier逆變換也是區域性的。

通過頻率引數和高斯函式引數的選取,Gabor變換可以選取很多紋理特徵,但是Gabor是非正交的,不同特徵分量之間有冗餘,所以在對紋理影象的分析中效率不太高。

 

相關推薦

學習OpenCV——Gabor函式應用

注:在我的資源中有改進過的cvgabor類 它有如下的功能: 生成特定方向和尺度的gabor 生成可以顯示或者儲存的gabor核的實部,虛部 影象的實部,虛部或者主要(Magnitude)響應 響應可以儲存在XML檔案中 #include "cvgabor.h

OpenCVGabor函式應用

注:在我的資源中有改進過的cvgabor類它有如下的功能:生成特定方向和尺度的gabor 生成可以顯示或者儲存的gabor核的實部,虛部影象的實部,虛部或者主要(Magnitude)響應響應可以儲存在XML檔案中#include "cvgabor.h" int main

pandas 學習彙總13 - 函式應用- 將自定義或其他庫函式應用於Pandas物件( tcy)

Pandas函式應用- 將自定義或其他庫函式應用於Pandas物件(pipe,apply,applymap,map,agg) 2018/12/5   1.函式:    # 表函式應用: df.pipe(func, *args, **kwarg

Oracle資料庫函式應用學習

1:建立無引數的函式     create or replace function func_datetime        return varchar2     is     begin           return to_char(sysdate,        

opencv日常學習之approxPolyDP函式和boundingRect函式說明

opencv中利用函式approxPolyDP來對指定的點集進行逼近,其逼近的精度是可設定的 對應的函式為: void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilo

OpenCV學習之convexHull函式的理解

1、convexhull函式的作用:     計算出影象的凸包,根據影象的輪廓點,通過函式convexhull轉化成凸包的點點座標,    從而畫出影象的凸包。2、convexHull函式的呼叫形式    void convexHull(InputArray points,O

R語言學習筆記 —— table 函式應用

一、table 函式對應的就是統計學中的列聯表,是一種記錄頻數的方法,對於統計來說有非常重要的應用,下面的例子都是針對維數為2的情況舉例,多維的情況是類似的 下面看一個例子: > ct <- data.frame( + Vote.for.X =

OpenCV學習之contourArea函式的理解

1、contourArea()函式的作用:主要用於計算影象輪廓的面積。2、double contourArea(InputArray contour,bool oriented=false)     引數:               InputArray contour :

opencv學習(3)——addWeighted函式將兩幅影象疊加

#include "opencv2/imgcodecs.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> #include<stdlib.h> using na

學習OpenCV】仿射變換函式warpAffine、旋轉

理論 翻開任意一本影象處理的書,都會講到影象的幾何變換,這裡麵包括:仿射變換(affine transformation)、投影變換(projecttive transformation)。前者針對的是平面上的物體位姿變化,如水平/垂直方向位移、旋轉、縮小/放大,常見的應

【日常學習】乘法逆元&&尤拉定理&&費馬小定理&&尤拉函式應用&&常大學霸

今天花了一個多小時終於把乘法逆元搗鼓明白了 鑑於我拙計的智商抓緊把這些記錄下來 在此本欄目鳴謝里奧姑娘和熱心網友himdd的幫助和支援 那麼正文開始··· 逆元是幹什麼的呢? 因為(a/b)mod

【Spark深入學習 -14】Spark應用經驗與程序調優

aps 它的 stack 申請 vco 用戶 統一 persist 資料 ----本節內容------- 1.遺留問題解答 2.Spark調優初體驗 2.1 利用WebUI分析程序瓶頸 2.2 設置合適的資源 2.3 調整任務的並發度

機器學習--如何將NLP應用到深度學習

amp 3.0 eba 下載 user word2vec title jieba googl 數據收集以後,我們下面接著要幹的事情是如何將文本轉換為神經網絡能夠識別的東西。 詞向量 作為自然語言,只有被數學化才能夠被計算機認識和計算。數學化的方法有很多,最簡單的方法是為

機器學習--如何將NLP應用到深度學習(3)

關系 http 命令 構建 time 原理 最簡 gcc 復雜 數據收集以後,我們下面接著要幹的事情是如何將文本轉換為神經網絡能夠識別的東西。 詞向量 作為自然語言,只有被數學化才能夠被計算機認識和計算。數學化的方法有很多,最簡單的方法是為每個詞分配一個編號,這種

js學習總結----Date和應用

color spa += form format second fun ext 效果 獲取當前自己電腦的時間:不能做重要的用途,例如淘寶秒殺   var time = new Date(); // 時間格式數據 (對象數據類型)   下面是格式化時間的方法  <!D

學習Opencv 2.4.9 (一)---Opencv + vs2012環境配置

-a class targe 貝爾 waitkey ron ini win font 作者:咕唧咕唧liukun321來自:http://blog.csdn.net/liukun321首先獲得最新的Opencv 2.4.9源代碼:opencv源代碼下載一、Opencv環

Halcon學習筆記——機器視覺應用工程開發思路及相機標定

助手 創建模板 建模 visio open 這一 目的 傅裏葉變換 綁定 機器視覺應用工程開發思路 機器視覺應用工程主要可劃分為兩大部分,硬件部分和軟件部分。 1.硬件部分,硬件的選型至關重要,決定了後續工作是否可以正常開展,其中關鍵硬件部

【從零學習openCV】IOS7下的openCV開發起步(Xcode5.1.1&amp;openCV2.49)

rgb load fcm 12px 轉換 sim 圖像 round ios 前言: 開發IOS7已經有一月的時間了。近期在準備推研的事,有點想往CV方向發展。於是開始自學openCV。 關註CSDN已經非常久了。也從非常多博主那學到了非常多知識,於是我也從這周開

學習Opencv 2.4.9(二) ---操作像素

椒鹽噪聲 window align 是個 簡單 ++ ima opencv2 mar 作者:咕唧咕唧liukun321來自:http://blog.csdn.net/liukun321本質上說一張圖像就是由數值組成的矩陣。Opencv 2.x由 cv::Mat 這個數據

學習opencv》筆記——關於一些畫圖的函數

pre close 角度 輸出結果 eight 畫圖 計數 tour cti 畫圖函數 (1)直線cvLine函數 其結構 void cvLine(//畫直線 CvArr* array,//畫布圖像 CvPoint pt1,//起始