欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解基于python的圖像Gabor變換及特征提取

 更新時(shí)間:2020年10月26日 10:51:42   作者:liaohaibing  
這篇文章主要介紹了基于python的圖像Gabor變換及特征提取,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1.前言

在深度學(xué)習(xí)出來之前,圖像識(shí)別領(lǐng)域北有“Gabor幫主”,南有“SIFT慕容小哥”。目前,深度學(xué)習(xí)技術(shù)可以利用CNN網(wǎng)絡(luò)和大數(shù)據(jù)樣本搞事情,從而取替“Gabor幫主”和“SIFT慕容小哥”的江湖地位。但,在沒有大數(shù)據(jù)和算力支撐的“鄉(xiāng)村小鎮(zhèn)”地帶,或是對(duì)付“刁民小輩”,“Gabor幫主”可以大顯身手,具有不可撼動(dòng)的地位。IT武林中,有基于C++和OpenCV,或是基于matlab的Gabor圖像變換與特征提取源代碼,但大多招數(shù)花哨。而基于Python語言的Gabor圖像變換和特征提取卻很少見。本博主在實(shí)現(xiàn)基于Python語言的Gabor圖像變換和特征提取中發(fā)現(xiàn)其確實(shí)比OpenCV或matlab務(wù)實(shí),話少人狠,特和大家分享。

2. “Gabor幫主”簡介

“Gabor幫主”最厲害的武器是Gabor濾波器,其最主要使用優(yōu)勢體現(xiàn)在對(duì)物體紋理特征的提取上。Gabor濾波器對(duì)于圖像的亮度和對(duì)比度變化以及圖像姿態(tài)變化具有較強(qiáng)的魯棒性,并且它表達(dá)的是對(duì)圖像識(shí)別最為有用的局部特征,故在計(jì)算機(jī)視覺及紋理分析領(lǐng)域中得到廣泛的應(yīng)用。Gabor濾波器可以提取不同方向和不同尺度的上的特征,并且進(jìn)行隨意組合,變幻莫測。下圖為4個(gè)方向(0o,45o,90o,135o)和6個(gè)尺度(7,9,11,13,15,17),組合生成的24個(gè)Gabor濾波核。

在這里插入圖片描述

3.“Gabor幫主”大招之圖像變換

所謂Gabor圖像變換就使用Gabor濾波器對(duì)圖像進(jìn)行濾波操作(相當(dāng)于CNN中的卷積操作)得到新的圖像。每個(gè)濾波核與圖像濾波之后得到:

在這里插入圖片描述

其中,λ為波,它的值以像素為單位指定,通常大于等于2。但不能大于輸入圖像尺寸的五分之一;
θ為方向,指定了Gabor函數(shù)并行條紋的方向,它的取值為0到2π;
ϕ為相位偏移,它的取值范圍為−π到π。其中,0、π度分別對(duì)應(yīng)中心對(duì)稱的center-on函數(shù)和center-off函數(shù),而-π/2和π/2對(duì)應(yīng)反對(duì)稱函數(shù);
γ為長寬比,空間縱橫比,決定了Gabor函數(shù)形狀的橢圓率,當(dāng)γ=1時(shí),形狀是圓的,當(dāng)γ<1時(shí),形狀隨著平行條紋方向而拉長,通常該值為0.5;
σ表示Gabor函數(shù)的高斯因子的標(biāo)準(zhǔn)差,它的值不能直接設(shè)置,它僅隨著帶寬b變化,帶寬值必須是正實(shí)數(shù),通常為1,此時(shí),標(biāo)準(zhǔn)差和波長的關(guān)系為:σ=0.56λ;帶寬(b):Gabor濾波器的半響應(yīng)空間頻率帶寬:

在這里插入圖片描述

x',y'的值為:

在這里插入圖片描述

gabor濾波核是復(fù)數(shù)形式,因此可以把它分開成實(shí)部和虛部:

在這里插入圖片描述
在這里插入圖片描述

弄清以上公式原理后,大家也可以自己嘗試?yán)肞ython把Gabor變換實(shí)現(xiàn),源代碼我這里就不貼了,如果大家感興趣,可以參考http://www.dbjr.com.cn/article/198212.htm。其實(shí),skimage包中就有封裝好的gabor變換函數(shù),可以直接調(diào)用。因此,這里介紹一種簡單偷懶的方式。從skimage中導(dǎo)入filters(from skimage import filters)后,便可調(diào)用gabor函數(shù)了,其函數(shù)說明如下:
skimage.filters.gabor(image, frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0, mode=‘reflect', cval=0)
1)函數(shù)返回:
Gabor變換后的實(shí)部和虛部real,imag;大小與輸入圖像尺寸相同。
2)函數(shù)參數(shù):
圖像(image):二維數(shù)組輸入圖像(灰度圖像);
頻率(frequency):浮點(diǎn)諧波函數(shù)的空間頻率,控制尺度;

在這里插入圖片描述

,在圖像特征提取領(lǐng)域通常取5個(gè)不同尺度

在這里插入圖片描述

方向(theta):float,可選的弧度方向,如果為0,則諧波處于x方向;

在這里插入圖片描述

,在圖像特征提取領(lǐng)域通常取8個(gè)不同方向u=[0,1,2,3,4,5,6,7]。
帶寬(bandwidth):浮點(diǎn),可選由過濾器捕獲的帶寬。對(duì)于固定帶寬,sigma_x和sigma_y將隨著頻率的增加而降低,如果用戶設(shè)置了sigma_x和sigma_y,則該值將被忽略;標(biāo)準(zhǔn)偏差(sigma_x,sigma_y):float,x和y方向上的可選標(biāo)準(zhǔn)偏差;
內(nèi)核的線性大小(n_stds):標(biāo)量,可選內(nèi)核的線性大小為n_stds(默認(rèn)為3)標(biāo)準(zhǔn)偏差;偏移量(offset):浮點(diǎn)數(shù),可選項(xiàng)以弧度表示的諧波函數(shù)的相位偏移;模式(mode):{‘constant',‘near',‘reflect',‘mirror',‘wrap'},可選用于將圖像與內(nèi)核進(jìn)行卷積的模式,傳遞給ndi.convolve;cval:標(biāo)量,可選值如果卷積模式為'不變',該參數(shù)被傳遞給ndi.convolve。
3)源代碼如下:

import matplotlib.pyplot as plt
from skimage import filters,io,color
import numpy as np

filename='D:/lena.jpg'
img = io.imread(filename)#讀取圖像
img_gray = color.rgb2gray(img)#RGB轉(zhuǎn)灰度
frequency=0.6
#調(diào)用gabor函數(shù)
real, imag = filters.gabor(img_gray, frequency=0.6,theta=45,n_stds=5)
#取模圖像
img_mod=np.sqrt(real.astype(float)**2+imag.astype(float)**2)
#圖像顯示
plt.figure()
plt.subplot(2,2,1)
plt.imshow(img_gray,cmap='gray')
plt.subplot(2,2,2)
plt.imshow(img_mod,cmap='gray')
plt.subplot(2,2,3)
plt.imshow(real,cmap='gray')
plt.subplot(2,2,4)
plt.imshow(imag,cmap='gray')
plt.show()

4)運(yùn)行結(jié)果如下:
左上角為原圖,右上角為變換后的模圖像,左下角為變換后實(shí)部圖像,右下角為變換后虛部圖像)
5)注意事項(xiàng)
①通過theta參數(shù)調(diào)不同方向,這里輸入是弧度,不是角度。②通過frequency參數(shù)調(diào)不同尺度變化。
6)利用skimage生成gobor卷積核:gabor_kernel
skimage.filters.gabor_kernel(frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0)
函數(shù)返回:返回2D Gabor濾波器內(nèi)核,包含實(shí)部與虛部。
參數(shù)與skimage.filters.gabor()函數(shù)相同。
源代碼如下:

import matplotlib.pyplot as plt
from skimage import filters
gk = filters.gabor_kernel(frequency=0.1,theta=np.pi*30/180.0,n_stds=5)
mod=np.sqrt(gk.real.astype(float) ** 2 + gk.imag.astype(float) ** 2)
plt.figure()
plt.subplot(1,3,1)
plt.imshow(gk.real*255,cmap='gray')
plt.subplot(1,3,2)
plt.imshow(gk.imag*255,cmap='gray')
plt.subplot(1,3,3)
plt.imshow(mod*255,cmap='gray')
plt.show()

運(yùn)行結(jié)果如下:

在這里插入圖片描述

注意事項(xiàng):①參數(shù)n_stds=3并不是說濾波核大小為(3,3),濾波核大小由參數(shù)frequency、theta、n_stds三個(gè)參數(shù)共同決定。②gabor_kernel函數(shù)返回是帶有實(shí)部和虛部的復(fù)矩陣。③theta是弧度,不是角度

3.“Gabor幫主”大招之圖像特征提取

Gabor濾波器可以在頻域上不同尺度、不同方向上提取相關(guān)的特征。另外,Gabor函數(shù)與人眼的作用相仿,所以經(jīng)常用作紋理識(shí)別上,并取得了較好的效果。Gabor特征提取一般包括取模、特征降維、特征歸一化和特征選取等操作:
取模:skimage.filters.gabor()函數(shù)返回的是圖像變換后的實(shí)部和虛部,在圖像識(shí)別領(lǐng)域一般使用其模作為圖像特征

在這里插入圖片描述

2)特征降維:skimage.filters.gabor()函數(shù)返回值大小和原圖像一樣;另外,圖像識(shí)別領(lǐng)域一般使用8個(gè)方向和5個(gè)尺度的gabor濾波器,得到40幅變換圖像;導(dǎo)致提取的圖像特征維度(40幅圖像特征串聯(lián))比較高。因此,需要對(duì)取模圖像進(jìn)行降維處理。最簡單的方法就是對(duì)每個(gè)模圖像進(jìn)行下采樣,如使用Opencv中的resize函數(shù)cv2.resize(img,(0,0),fx=1/4,fy=1/4)。
3)特征歸一化:
在機(jī)器學(xué)習(xí)領(lǐng)域中,不同評(píng)價(jià)指標(biāo)(即特征向量中的不同特征就是所述的不同評(píng)價(jià)指標(biāo))往往具有不同的量綱和量綱單位,這樣的情況會(huì)影響到數(shù)據(jù)分析的結(jié)果,為了消除指標(biāo)之間的量綱影響,需要進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理,以解決數(shù)據(jù)指標(biāo)之間的可比性。原始數(shù)據(jù)經(jīng)過數(shù)據(jù)標(biāo)準(zhǔn)化處理后,各指標(biāo)處于同一數(shù)量級(jí),適合進(jìn)行綜合對(duì)比評(píng)價(jià)。其中,最典型的就是數(shù)據(jù)的歸一化處理。簡而言之,歸一化的目的就是使得預(yù)處理的數(shù)據(jù)被限定在一定的范圍內(nèi)。本博主介紹一種Z-score標(biāo)準(zhǔn)化方法:
當(dāng)一化公式:

在這里插入圖片描述

其中μ為所有樣本數(shù)據(jù)的均值,σ為所有樣本數(shù)據(jù)的標(biāo)準(zhǔn)差。
b)本方法要求原始數(shù)據(jù)的分布可以近似為高斯分布,否則歸一化的效果會(huì)變得很糟糕;
c)應(yīng)用場景:在分類、聚類算法中,需要使用距離來度量相似性的時(shí)候、或者使用PCA技術(shù)進(jìn)行降維的時(shí)候,Z-score standardization表現(xiàn)更好。
4)特征選取
經(jīng)過以上三步后,可以將各模圖像特征串聯(lián)起來作為輸入圖像的特征向量。但此時(shí)得到的特征向量存在大量冗余,最好再進(jìn)行一次特征降維(特征選?。┎僮???梢圆捎肞CA或Fisher等線性子空間分析方法。
5)源代碼:

import cv2
import numpy as np
from skimage import filters
filename='D:/lena.jpg'
img = cv2.imread(filename)#讀圖像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#轉(zhuǎn)灰度
frequency=0.6
#gabor變換
real, imag = filters.gabor(img_gray, frequency=0.6,theta=45,n_stds=5)
#取模
img_mod=np.sqrt(real.astype(float)**2+imag.astype(float)**2)
#圖像縮放(下采樣)
newimg = cv2.resize(img_mod,(0,0),fx=1/4,fy=1/4,interpolation=cv2.INTER_AREA)
tempfea = newimg.flatten()#矩陣展平
tmean = np.mean(tempfea)#求均值
tstd = np.std(tempfea)#求方差
newfea = (tempfea - tmean)/tstd#數(shù)值歸一化
print(newfea)

夜已深,公司都沒有一個(gè)人了,空蕩蕩的。先寫到這里吧,第一次在CSDN上發(fā)博文,有不到之處請(qǐng)指正,如果您覺得還有點(diǎn)用,請(qǐng)點(diǎn)個(gè)贊以支鼓勵(lì),不勝感激?。。?!

到此這篇關(guān)于詳解基于python的圖像Gabor變換及特征提取的文章就介紹到這了,更多相關(guān)python Gabor變換及特征提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python進(jìn)行圖片的文字識(shí)別詳細(xì)代碼

    使用python進(jìn)行圖片的文字識(shí)別詳細(xì)代碼

    Tesseract OCR是一款由Google團(tuán)隊(duì)開發(fā)的開源OCR引擎,用于將圖片、PDF 等格式中的文本轉(zhuǎn)換為可編輯的文本格式,本文主要介紹了Python進(jìn)行圖片的文字識(shí)別功能OCR的相關(guān)知識(shí),需要的朋友可以參考下
    2023-05-05
  • Python通過paramiko庫實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法

    Python通過paramiko庫實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法

    這篇文章主要介紹了Python通過paramiko庫實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python全棧之隊(duì)列詳解

    Python全棧之隊(duì)列詳解

    這篇文章主要為大家介紹了Python全棧之隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Flask框架編寫文件下載接口過程講解

    Flask框架編寫文件下載接口過程講解

    這篇文章主要介紹了Flask框架編寫文件下載接口的過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • python缺失值的解決方法總結(jié)

    python缺失值的解決方法總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python缺失值的解決方法總結(jié),有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-06-06
  • pandas 添加空列并賦空值案例

    pandas 添加空列并賦空值案例

    這篇文章主要介紹了pandas 添加空列并賦空值案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 獲取字符串MD5值方法

    python 獲取字符串MD5值方法

    今天小編就為大家分享一篇python 獲取字符串MD5值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python分布式異步任務(wù)框架Celery使用教程

    Python分布式異步任務(wù)框架Celery使用教程

    Celery 是由Python 編寫的簡單,靈活,可靠的用來處理大量信息的分布式系統(tǒng),它同時(shí)提供操作和維護(hù)分布式系統(tǒng)所需的工具
    2023-05-05
  • Python腳本調(diào)試工具安裝過程

    Python腳本調(diào)試工具安裝過程

    這篇文章主要介紹了Python腳本調(diào)試工具非常好用,本文給大家介紹pycharm工具的安裝過程及使用詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化繪圖

    Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化繪圖

    這篇文章主要介紹了Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化繪圖,文章圍繞主題基于Python展開CSV文件讀取的詳細(xì)內(nèi)容介紹,感興趣的小伙伴可以參考一下
    2022-06-06

最新評(píng)論