HOG演算法的matlab實現1 0

2021-08-11 14:23:06 字數 3018 閱讀 5040

傳統的影象歸一化一般採用gamma標準化形式:

作用時將光照等印象因素有效的剔除

歸一化操作是對塊進行的,主要是為了使得特徵向量空間對光照陰影和變化具有魯棒性。

下面是matlab****)

clear;

clc;

img=imread('d:\lena.jpg');%位置

%% 1、灰度化

img=rgb2gray(img);%如果已經灰度化則刪掉

img=double(img);

figure;

imshow(img,);%顯示影象

step=8; %step*step個畫素作為乙個cell

[m1 ,n1]=size(img);%獲取影象尺寸

%改變影象尺寸為step的最近整數倍,要不然後面就會發生錯誤

img=imresize(img,[floor(m1/step)*step,floor(n1/step)*step],'nearest');

[m,n]=size(img);

% 1、伽馬校正

figure;

img=sqrt(img);

imshow(img,);%顯示影象

%% 下面是求邊緣,也就是濾波,求梯度

fy=[-1

01]; %定義豎直模板

fx=fy'; %定義水平模板,該符號為轉置

iy=imfilter(img,fy,'replicate'); %豎直邊緣

ix=imfilter(img,fx,'replicate'); %水平邊緣

ied=sqrt(ix.^2+iy.^2); %邊緣強度 求梯度的長度

iphase=iy./ix; %邊緣斜率,有些為inf,-inf,nan,其中nan需要再處理一下

figure; %% 建立乙個畫板

imshow(ied,); %顯示梯度提取後的值

%% 下面是求cell

orient=9; %方向直方圖的方向個數

angular=360/orient; %每個方向包含的角度數,劃分角度區間,0到40度乙個區間...

cell=cell(1,1); %所有的角度直方圖,cell是可以動態增加的,所以先設了乙個

%% 開始獲取orient個方向的特徵向量

ii=1;

jj=1;

fori=1:step:m-step %如果處理的m/step不是整數,最好是i=1:step:m-step

ii=1;

forj=1:step:n %注釋同上

tmpx=ix(i:i+step-1,j:j+step-1); %水平

%% 邊緣強度

tmped=ied(i:i+step-1,j:j+step-1);

%% 區域性邊緣強度歸一化

tmped=tmped/sum(sum(tmped));

%% 邊緣斜率區域性提取

tmpphase=iphase(i:i+step-1,j:j+step-1);

%% 建立直方圖

hist=zeros(1,orient); %當前step*step畫素塊統計角度直方圖,就是cell

%% 統計乙個塊裡面的梯度資訊

for p=1:step

for q=1:step

%% 判斷是不是乙個數字true for not-a-number.如果不是乙個數字,就歸零

ifisnan(tmpphase(p,q))==1

%因為會遇到0/0的情況

tmpphase(p,q)=0;

end%% 進行區間的劃分

ang=atan(tmpphase(p,q)); %atan求的是[-90 90]度之間

ang=mod(ang*180/pi,360); %全部變正,-90變270

if tmpx(p,q)<0

%根據x方向確定真正的角度

if ang<90

%如果是第一象限

ang=ang+180; %移到第三象限

endif ang>270

%如果是第四象限

ang=ang-180; %移到第二象限

endend

ang=ang+0.0000001; %防止ang為0

hist(ceil(ang/angular)) = hist(ceil(ang/angular))+tmped(p,q); %ceil向上取整,使用邊緣強度加權

endend

%% 方向直方圖歸一化

hist=hist/sum(hist);

cell=hist; %放入cell中

ii=ii+1; %針對cell的y座標迴圈變數

end jj=jj+1; %針對cell的x座標迴圈變數

end%% 下面是求feature,2*2個cell合成乙個block,沒有顯式的求block

[m2, n2]=size(cell);

feature=cell(1,(m2-1)*(n2-1));

fori=1:m2-1

forj=1:n2-1

f=;f=[f cell(:)' cell(:)' cell(:)' cell(:)'];

feature=f;

endendl=length(feature);

f=;for

i=1:l

f=[f;feature(:)'];

end

figure

mesh(f)

Hog特徵的簡單實現 matlab

hog特徵的簡單實現 針對hog特徵不做過多的解釋 可參考其他博主的原理介紹。本文是matlab版本的實現。該版本的hog特徵將影象resize為64 128 首先將rgb轉灰度圖 再進行伽馬校正 對伽馬校正後的影象做歸一化處理 為什麼這樣做,請參看其他博主具體的原理介紹 伽馬校正使用的是 open...

Q learning演算法實現1(matlab)

演算法偽 得到q表後,根據如下演算法選擇最優策略 以機械人走房間為例,實現如下 注 原文中的房間狀態0 5分別對應 中1 6 機械人走房間q learning的實現 基本引數 episode 100 探索的迭代次數 alpha 1 更新步長 gamma 0.8 折扣因子 state num 6 ac...

RVM演算法的matlab實現

這裡用matlab實現了簡單的rvm演算法,具體演算法詳見prml 7.2節。如下 close all clear all clc parameters n 200 訓練集樣本數 nts 1000 測試集 集樣本數 data generation and display x,t datagen n ...