日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab 高斯一阶导,将Matlab高斯导数转换为Opencv

發(fā)布時間:2025/4/5 循环神经网络 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab 高斯一阶导,将Matlab高斯导数转换为Opencv 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我試圖將我在matlab中制作的舊練習轉(zhuǎn)換為OpenCV。代碼如下。我還沒有找到任何我想要的OpenCv功能,可能是因為其他名稱,然后我的期望。

以每個位置的最大響應作為標簽時,以下是輸出。顯然有些事情。

這里是matlab代碼:

function responses = getBifResponsesEx(im, myEps, sigma, kernelSize)

if ( nargin == 3 )

if ( sigma >= 1 )

kernelSize = 6*sigma + 1;

else

kernelSize = 7;

end

end

responses = zeros(size(im,1), size(im,2), 7);

%

% Gaussian derivatives

%

kernVal = ceil(kernelSize/2) - 1;

x = (-kernVal:kernVal);

g = 1/(2*pi*sigma^2)*exp(-(x.^2./(2*(sigma^2))));

g = g/sum(g);

dg = -2*x/(2*sigma^2).*g*sigma;

ddg = ((2*x/(2*sigma^2)).^2 - 1/(sigma^2)).*g*sigma;

%

% Gaussian convolution of the image

%

s00 = filter2(g, im);

s00 = filter2(g', s00);

s10 = filter2(g', im);

s10 = filter2(dg, s10);

s01 = filter2(g, im);

s01 = filter2(dg', s01);

s11 = filter2(dg, im);

s11 = filter2(dg', s11);

s20 = filter2(g', im);

s20 = filter2(g', s20);

s20 = filter2(ddg, s20);

s02 = filter2(g, im);

s02 = filter2(g, s02);

s02 = filter2(ddg', s02);

%

% Symmetry types - MISSING CODE!!!!

%

lam = sigma^2*(s20+s02);

gam = sigma^2*(sqrt((s20-s02).^2+4*s11.^2));

responses(:,:,1) = myEps*s00;

responses(:,:,2) = 2*sigma*sqrt(s10.^2+s01.^2);

responses(:,:,3) = +lam;

responses(:,:,4) = -lam;

responses(:,:,5) = 2^-.5*(gam+lam);

responses(:,:,6) = 2^-.5*(gam-lam);

responses(:,:,7) = gam;

end這是我轉(zhuǎn)換后的頁面。從我所能看到的情況來看,它與s20,s02的回應相差無幾。任何人都可以告訴我該怎么辦?

void extract_bif_features(const cv::Mat & src,

std::vector<:mat> & dst, BIFParams params)

{

float sigma = params.sigma;

float n=0;

int kernelSize;

if(sigma>=1)

kernelSize = 6*sigma + 1;

else

kernelSize = 7;

cv::Mat gray,p00,p10,p01,p11,p20,p02;

cv::cvtColor(src,gray,CV_BGR2GRAY);

auto kernVal = (int)ceil(kernelSize/2.0) - 1;

cv::Mat_ g(1,kernelSize);float*gp = g.ptr();

cv::Mat_ dg(1,kernelSize);float*dgp = dg.ptr();

cv::Mat_ ddg(1,kernelSize); float*ddgp = ddg.ptr();

cv::Mat_ X(1,kernelSize);float*xp = X.ptr();

auto gsum=0.0f;

for(int x = -kernVal;x<=kernVal;++x)

{

xp[x+kernVal] = x;

gp[x+kernVal] = 1/(2*CV_PI*sigma*sigma)*exp(-(x*x/(2*(sigma*sigma))));

gsum += gp[x+kernVal];

}

g = g/gsum;

cv::multiply((-2*X / (2*sigma*sigma)),g*sigma,dg);

cv::pow((2*X/(2*sigma*sigma)),2,ddg);

ddg -=1/(sigma*sigma);

cv::multiply(ddg,g*sigma,ddg);

std::cout << ddg<< std::endl;

std::cout << dg<< std::endl;

cv::sepFilter2D(gray,p00,CV_32FC1,g,g,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE); cv::sepFilter2D(gray,p01,CV_32FC1,dg,g,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE); cv::sepFilter2D(gray,p10,CV_32FC1,g,dg,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE); cv::sepFilter2D(gray,p11,CV_32FC1,dg,dg,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

//NOT SURE HERE

cv::sepFilter2D(gray,p20,CV_32FC1,g,ddg,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

//cv::sepFilter2D(p20,p20,CV_32FC1,1,g,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE); cv::sepFilter2D(gray,p02,CV_32FC1,g,ddg,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE); //cv::sepFilter2D(p02,p02,CV_32FC1,g,1,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

cv::filter2D(gray,p20,CV_32FC1,g,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

cv::filter2D(p20,p20,CV_32FC1,g,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

cv::filter2D(p20,p20,CV_32FC1,ddg,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

cv::filter2D(gray,p02,CV_32FC1,g,cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

cv::filter2D(p02,p02,CV_32FC1,g.t(),cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

cv::filter2D(p02,p02,CV_32FC1,ddg.t(),cv::Point(-1,-1),0.0,cv::BORDER_REPLICATE);

dst.resize(6);

auto sigma_square = sigma*sigma;

cv::Mat Lam = sigma_square * (p20+p02);

cv::Mat Gam ;

cv::sqrt((((p20-p02)*(p20-p02))+4*p11*p11),Gam);

Gam *= sigma_square ;

cv::Mat test = p10*p10;

//slop

cv::sqrt(p10*p10 + p01*p01,dst[0]);

dst[0] = dst[0]*2*sigma;//slop

//blob

dst[1] = Lam;

dst[2] = -1*Lam;

//line

dst[3] = sqrt(2.0f)*(Gam+Lam);

dst[4] = sqrt(2.0f)*(Gam-Lam);

//saddle

dst[5] = Gam;

}

總結(jié)

以上是生活随笔為你收集整理的matlab 高斯一阶导,将Matlab高斯导数转换为Opencv的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。