圖像特征提取——韋伯局部描述符(WLD)

一、原理及概述

  韋伯局部描述符(WLD)是一種魯棒性好、簡單高效的局部特征描述符。WLD由兩個部分組成:差分激勵和梯度方向。

  其具體算法是對于給定的一幅圖像,通過對每個像素進行這兩個分量的計算來提取其差分激勵圖像和梯度方向圖像,并將這兩部分組合成一個二維直方圖,進而轉化為一個一維直方圖,最后利用一維直方圖進行分類。[1]

?

  差分激勵:差分激勵時某像素領域值和減去8倍中心像素值的結果與該像素點的比值。顯然,這反映了當前像素點與領域像素點之間的差異。

  在對差分激勵有了一個概念性的認識以后,我們來看數學表述:

?

  綜合上述公式,我們整合一下:

  通過計算式子,我們知道如果Garctan>0,則表明領域像素的亮度大于當前像素;反之,則表明當前像素在該區域內的亮度較低。

  在計算過程中,為了避免出現輸入值過大或過小的情況從而造成不可控的局面,可以通過一個函數將其映射到一個合理范圍之內。常用的是sigmoid函數、arctan函數以及對數函數。sigmoid函數如下:

  由于考慮到sigmoid函數的計算量較大,所以往往可以選用arctan函數。

?

  梯度方向:通過計算局部窗內水平方向和垂直方向像素插值之比的反正切變換得到[1]。梯度方向反映的是局部窗內灰度變化的空間分布信息。

  以下為梯度方向的數學表述,注意,xi在下面一張圖里。

  為了更加有效地區分灰度窗內灰度變化的分布情況,,我們需要將其擴展到[0,2pi)。設映射f:,有:

  最后,需要對其量化,計算過程如下:

?

  直方圖:在圖像中利用直方圖表示灰度分布。在此處,直方圖是用于局部描述算子的變量之一。

  我們在得到了差分激勵與梯度方向以后,可以得到兩幅新的圖像:差分激勵圖像和梯度方向圖像,從而可以得到二維WLD直方圖。其中,N為圖像的維度,T為方向域的分段個數,每一小塊都對應一個差分激勵和梯度方向。

  為便于分類,,需要將二維直方圖轉化為一維直方圖。整個過程如下圖所示,其實我的理解就是,一行一行的排列,(就像在C里,二維數組其實是個一維數組一樣,只是他是一行一行的讀取罷了)

?

?

?  綜合:了解了這幾個基本信息以后,我們來看一張圖,好詳細理解WLD算子:

  對于差分激勵來講,v00,v01,我們知道他是可以看作上圖中的濾波算子,同理,v10,v11也是如此。我們通過分別計算完差分激勵與梯度方向后,得到有關二者的二維直方圖,最后將二維直方圖一維化,即為WLD算子的全部操作。

?二、代碼及其結果

  以下為WLD算子的代碼:

image=imread('lena.jpg');
image=rgb2gray(image);
d_image=double(image);
[xsize ysize] = size(d_image);
EPSILON=0.0000001;
numNeighbors=8; d_differential_excitation = zeros(xsize-1,ysize-1);
d_gradient_orientation = zeros(xsize-1,ysize-1);%計算WLD
for x = 2:xsize-1for y = 2:ysize-1% 計算差勵v00=d_image(x-1,y-1)+d_image(x,y-1)+d_image(x+1,y-1)+d_image(x-1,y)+d_image(x+1,y)+d_image(x-1,y+1)+d_image(x,y+1)+d_image(x+1,y+1)-8*d_image(x,y);v01=d_image(x,y);if ( v01 ~= 0 )d_differential_excitation(x,y)=atan(v00/v01);elsed_differential_excitation(x,y)=0;end% 計算梯度方向N2=d_image(x,y-1);         N6=d_image(x,y+1);N4=d_image(x+1,y);         N0=d_image(x-1,y);if ( abs(N0-N4) < EPSILON)		d_gradient_orientation(x,y) = 0;elsev10=N6-N2;		v11=N0-N4;d_gradient_orientation(x,y) = atan(v11/v10);% 映射至0-2pi之間%角度轉化為數值 && 梯度方向的量化d_gradient_orientation(x,y)=d_gradient_orientation(x,y)*180/pi;if     (v11 >  EPSILON && v10 >  EPSILON)		d_gradient_orientation(x,y)= d_gradient_orientation(x,y)+ 180;   else if (v11 < -EPSILON && v10 >  EPSILON)      d_gradient_orientation(x,y)= d_gradient_orientation(x,y)+ 180;  else if (v11 < -EPSILON && v10 < -EPSILON)      d_gradient_orientation(x,y)= d_gradient_orientation(x,y); else if (v11 >  EPSILON && v10 < -EPSILON)		d_gradient_orientation(x,y)= d_gradient_orientation(x,y)+ 360; endendendendendend
end
% 對梯度方向值與差勵進行量化
% 將差勵6等分,梯度8等分
%reshape函數重新調整矩陣的行數、列數、維數。下為將所有元素展現為一列
d_differential_excitation_one = reshape(d_differential_excitation,[size(d_differential_excitation,1)*size(d_differential_excitation,2),1]);
d_gradient_orientation_one = reshape(d_gradient_orientation,[size(d_gradient_orientation,1)*size(d_gradient_orientation,2),1]);
% figure;
%直方圖,指定柱狀數量為6
H_dif = histogram(d_differential_excitation_one,6);
dif_edge=H_dif.BinEdges;
% figure;
H_gra = histogram(d_gradient_orientation_one,8);
gra_edge=H_gra.BinEdges;
% count 兩個矩陣的像素點的直方圖歸到6*8矩陣 
%循環實現計數功能,即每一節直方圖的出現的像素點的個數
histNumbers = zeros(6,8);
for i=1:length(d_differential_excitation_one)temp1 = d_differential_excitation_one(i);temp2 = d_gradient_orientation_one(i);for k = 2:length(dif_edge)if temp1 <= dif_edge(k)g1 = k-1;break;endendfor k = 2:length(gra_edge)if temp2 <= gra_edge(k)g2 = k-1;break;endendhistNumbers(g1,g2) = histNumbers(g1,g2)+1;
end%figure(111);%bar3(histNumbers');
mid_dif=[];%二維直方圖的完善
for i=1:length(dif_edge)-1temp = (dif_edge(i)+dif_edge(i+1))/2;temp = round(temp*100)/100;mid_dif = [mid_dif,temp];
end
set(gca, 'XTickLabel',{num2str(mid_dif(1)),num2str(mid_dif(2)),num2str(mid_dif(3)),num2str(mid_dif(4)),num2str(mid_dif(5)),num2str(mid_dif(6))});
mid_gra=[];
for i=1:length(gra_edge)-1temp = (gra_edge(i)+gra_edge(i+1))/2;temp = round(temp*100)/100;temp = temp*2*pi/360;mid_gra = [mid_gra,temp];
endbarhang=[];
for i=1:size(histNumbers,1)barhang=[barhang,histNumbers(i,:)];
end
% bar(barhang);
% % 繪圖
figure(123);
subplot(2,2,1),imshow(d_differential_excitation,[]); title('差勵')
image_DE = (255* (d_differential_excitation - (-pi/2))/((pi/2)-(-pi/2)));
subplot(2,2,2),imshow(mat2gray(uint8(image_DE)));title('差勵歸到[0,255]')
subplot(2,2,3),imshow(d_gradient_orientation,[]); title('梯度方向')
image_DO = (255* (d_gradient_orientation - (-pi/2))/((pi/2)-(-pi/2)));
subplot(2,2,4),imshow(mat2gray(uint8(image_DO)));title('梯度方向歸到[0,255]')

  結果如下:

  差分激勵和梯度方向的兩幅圖像分別顯示如下:

  一維直方圖效果為:

?

參考文獻;

[1]李思.復雜光照下圖像特征提取.(D).西安:長安大學,2018.

?

2019-05-09

17:41:41

?

?

  

轉載于:https://www.cnblogs.com/lyxyhhxbk/p/10835780.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387726.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下Nagios的安裝與配置

Linux下Nagios的安裝與配置 一、Nagios簡介 Nagios是一款開源的電腦系統和網絡監視工具&#xff0c;能有效監控Windows、Linux和Unix的主機狀態&#xff0c;交換機路由器等網絡設置&#xff0c;打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員&am…

POJ_3262 Protecting the Flowers 【貪心】

一、題面 POJ3262 二、分析 這題要往貪心上面想應該還是很容易的&#xff0c;但問題是要證明為什么比值關系就能滿足。 可以選擇幾個去分析&#xff0c;入1-6 與 2-15 和 1-6 與2-5 和 1-6 與 2- 12。 三、AC代碼 1 #include <cstdio>2 #include <iostream>3 #in…

WebLogic安裝Linux centos7

一、安裝前準備工作&#xff1a; 1、創建用戶useradd weblogic;創建用戶成功linux系統會自動創建一個和用戶名相同的分組&#xff0c;并將該用戶分到改組中。并會在/home路徑下創建一個和用戶名相同的路徑&#xff0c;比如我們創建的weblogic。 注&#xff1a;當然&#xff0…

jquery如何阻止子元素繼承父元素的事件(又稱事件冒泡)

非常簡單&#xff0c;子元素上添加如下代碼即可 1 $(a).click(function(e){ 2 e.stopPropagation(); 3 }); 老版本為event,現在用e就行 轉載于:https://www.cnblogs.com/chengbo2130/p/10152747.html

java spring cloud 版 b2b2c 社交電商-服務消費者(Feign)

社交電商平臺源碼請加企鵝求求&#xff1a;一零三八七七四六二六。Feign是一個聲明式的偽Http客戶端&#xff0c;它使得寫Http客戶端變得更簡單。使用Feign&#xff0c;只需要創建一個接口并注解。它具有可插拔的注解特性&#xff0c;可使用Feign 注解和JAX-RS注解。Feign支持可…

Mybaits自定義SQL

最近有個同事要包裝一個可以執行sql語句的功能用的是mybatis 最開始他想到的方案是拿到數據庫連接再執行sql語句。 后來出了某些錯誤來問我&#xff0c;為了尋求比較快的解決方法于是我就試試了下下面的方法。 首先在Mapper添加 <select id"select" resultMap&qu…

Beta 沖刺 (7/7)

團隊信息 隊名&#xff1a;爸爸餓了組長博客&#xff1a;here作業博客&#xff1a;here組員情況 組員1&#xff08;組長&#xff09;&#xff1a;王彬 過去兩天完成了哪些任務 協助完成安卓端的整合完成安卓端的美化協助制作宣傳視頻 接下來的計劃 & 還剩下哪些任務 I am d…

類的轉換函數調用的優先級與是否用const修飾的關系

P415 C Primer Plus (第六版&#xff09;(待解決~~知道原理的同學請留言&#xff0c;多謝~~&#xff09; #include <iostream>using namespace std; class Cp{private:   int a;   double b;public:   Cp()   {     a 1;     b 2.2;   } operator in…

Java Web 學習與總結(一)Servlet基礎

配置環境&#xff1a;https://www.cnblogs.com/qq965921539/p/9821374.html 簡介&#xff1a; Servlet是Sun公司提供的一種實現動態網頁的解決方案&#xff0c;在制定J2EE時引入它作為實現了基于Java語言的動態技術&#xff0c;目前流行的Web框架基本都基于Servlet技術&#xf…

堪稱經典

程序員作為高智商、高收入、高壓力群體&#xff0c;經常會有各種自嘲&#xff0c;而且還天生攜帶段子手基因。不信看看下面這些段子&#xff0c;一般人哪能懂&#xff01; 1、殺一個程序員不需要用槍&#xff0c;改三次需求就可以了 2、程序員退休后決定練習書法&#xff0c;于…

【洛谷 P1659】 [國家集訓隊]拉拉隊排練(manacher)

題目鏈接 馬拉車簡單膜你 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN 11000010; const int MOD 19930726; char b[MAXN], a[MAXN << 1]; int hw[MAXN << 1], ans 1, n, c[MAXN]; #defi…

Judy Beta 第三天

概述 前端部分對于打包的流程以及相關 package.json 的配置都已經比較熟悉了&#xff0c;目前主要負責對新實現的 feature 做測試&#xff0c;以及參考 DAP 為后端明確數據交換的格式及參數內容等。 后端部分按照更新的 wiki 實現了變量展開&#xff0c;并且根據 DAP 的協議流程…

oracle表空間不足

oracle表空間不足&#xff0c;一般有兩個原因&#xff1a;一&#xff0c;原表空間太小&#xff0c;沒有自增長&#xff1b;二&#xff0c;表空間已自增長&#xff0c;而且表空間也已足夠大&#xff0c;對于這兩種原因分別有各自的解決辦法。 【檢查原因】 1、查看表在那個表空…

python學習中遇到的問題

2019獨角獸企業重金招聘Python工程師標準>>> def contract_str():index 8db_size 8new_table_name b_str(index & (db_size-1))print new_table_name ImportError: No module named mysql.connector import mysql.connector as sql_connector Python保存時提…

Arcgis 使用ArcToolbox實現數據統計

在ArcMap中打開ArcToolbox&#xff0c; ->Data Managerment Tools ->General ->Add你需要統計的所有數據轉載于:https://www.cnblogs.com/CoffeeEddy/p/10161863.html

oracle分區索引及循環插入

表可以按range、hash、list分區&#xff0c;表分區后&#xff0c;其上的索引和普通表上的索引有所不同&#xff0c;oracle對于分區表上的索引分為2類&#xff0c;即局部索引和全局索引&#xff0c;下面分別對這2種索引的特點和局限性做個總結。 局部索引local index 1.局部索引…

classloader.getresources() 介紹

轉載自&#xff1a; https://www.cnblogs.com/bhlsheji/p/4095699.html ◆普通情況下,我們都使用相對路徑來獲取資源,這種靈活性比較大. 比方當前類為com/bbebfe/Test.class 而圖像資源比方sample.gif應該放置在com/bbebfe/sample.gif 而假設這些圖像資源放置在icons文件夾下,則…

Anti-Aliasing SSAA MSAA MLAA SRAA 簡介

http://blog.csdn.net/codeboycjy/article/details/6312758 前兩天在瀏覽游民星空的時候&#xff0c;小編居然在文章中掛了一篇技術文章&#xff0c;是關于SRAA的。對于AA的了解很少&#xff0c;正好入職之前還有幾天的空閑時間&#xff0c;所以就這個機會把AA的一些基本算法簡…

MyBatis多數據源配置(讀寫分離)

MyBatis多數據源配置(讀寫分離) 首先說明&#xff0c;本文的配置使用的最直接的方式&#xff0c;實際用起來可能會很麻煩。 實際應用中可能存在多種結合的情況&#xff0c;你可以理解本文的含義&#xff0c;不要死板的使用。 多數據源的可能情況 1.主從 通常是MySQL一主多…

UI簡單工作

UI用戶界面 需求——效果圖——風格設計——高保證效果——html 網頁的寬度屏幕的寬度-縱向滾動條的寬度 企業網站一般是1280 根據百度流量研究所 目前我們的網頁注主要是1024和1200 這樣的寬度符合大體市場 首屏高度。 首屏的概念來源于出版領域 報紙折疊后販賣&…