我试图将我在matlab中制作的旧练习转换为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这是我转换后的页面。从我所能看到的情况来看,它与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;

}

matlab 高斯一阶导,将Matlab高斯导数转换为Opencv相关推荐

  1. matlab 高斯一阶导,高斯函数及其各阶导数

    [使用Matlab进行拟合是图像处理中线条变换的一个重点内容,本文将详解Matlab中的直线拟合和曲线拟合用法.关键函数:fittypeFit type for curve and surface f ...

  2. 图像增强之拉普拉斯锐化---高斯一阶导二阶导数

    图像处理之高斯一阶及二阶导数计算 图像的一阶与二阶导数计算在图像特征提取与边缘提取中十分重要.一阶与二阶导数的 作用,通常情况下: 一阶导数可以反应出图像灰度梯度的变化情况 二阶导数可以提取出图像的细 ...

  3. matlab 曲线拟合求导,基于matlab曲线拟合的数据预测分析

    龙源期刊网 http://www.doczj.com/doc/2f22f716cbaedd3383c4bb4cf7ec4afe05a1b148.html 基于matlab曲线拟合的数据预测分析 作者: ...

  4. 拉普拉斯Laplace算子和高斯二阶导核(LOG算子)和SIFT算法

    前置知识 边缘检测:图像边缘的强度(边缘线的清晰度)由图像的梯度的强度决定,因为梯度值越强,说明x轴.y轴的像素点变化越快,所以该点处越可能是边缘.边缘和梯度方向是垂直的.举个例子,下图就是用的y方向 ...

  5. 【matlab】求导

    一:matlab求一阶导 diff(y,x) 其中y是x的函数 二:matlab求二阶导 diff(y,x,2) 三:举例 syms x y y=x^3; dy=diff(y,x) ddy=diff( ...

  6. 【光学】基于matlab GS算法高斯光转换成高阶高斯光+一阶空心高斯光+贝塞尔高斯光【含Matlab源码 2166期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GS算法高斯光转换成高阶高斯光+一阶空心高斯光+贝塞尔高斯光[含Matlab源码 2166期] 点击上面蓝色字体 ...

  7. 2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法

    matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法 Function [x,iter]=gs(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu ...

  8. matlab 离散点求导_Matlab的离散点曲线导数曲率数值模拟方法

    模拟方法: 复制内容到剪贴板 代码 : clc; clear all; close all; x0 = linspace(0, 1); y0 = sin(x0).*cos(x0); h = abs(d ...

  9. 基于MATLAB的批量3度带高斯正算(LB--xy)

    文章目录 一.高斯正算原理 (1)高斯-克吕格投影 (2)高斯正算原理以及公式(LB----xy) 二.MATLAB高斯正算详解代码 1.源数据 2.源码 3.运行结果 一.高斯正算原理 (1)高斯- ...

最新文章

  1. 区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
  2. 为所欲为——教你什么才是真正的任意分频
  3. android aop静态方法,spring aop 不能对静态方法进行增强解决
  4. 求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
  5. python的语句_Python的语句
  6. python元素定位input button_python+selenium 定位到元素,无法点击的解决方法
  7. [SQL Server 2014] SQL Server 2014新特性探秘
  8. iOS之 开发学习笔记-block
  9. vmware vsphere出现“需要整合虚拟机磁盘”的告警处理方法(完整版)
  10. Reading query string values in JavaScript
  11. 【路径规划】基于matlab GUI改进的DWA算法机器人静态避障路径规划【含Matlab源码 678期】
  12. Polymorphism in Overloaded and Overridden Method
  13. HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)
  14. Ubuntu上安装R和rstudio-server
  15. Vue从入门到放弃(一)——指令篇
  16. python继承和多态心得_python学习第十五天 -面向对象之继承和多态
  17. OVAL学习之第二篇
  18. RTD2172/RTD2171 Type-C转HDMI设计方案|替代RTD2171/RTD2172芯片|GSV2201可完全替代兼容RTD2172/RTD2171
  19. 模型预测控制的缺点_基于数据驱动的模型预测控制
  20. NX/UG二次开发—其他—分享几个UG内部函数

热门文章

  1. 2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  2. FPGA进阶篇--SPI控制双通道16bit串行DAC8532
  3. [Android工具]更新安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件
  4. 理一理Latency、Bandwidth、Throughput、Response Time概念的区别
  5. 关于同步加载与异步加载的区别
  6. Rsync+inotify搭建使用
  7. Android 导航栏如何轻松搞定
  8. [Erlang 0014]Erlang垃圾回收机制
  9. 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
  10. 监控摄像机选型攻略之有无必要性