通过反汇编实现halcon算子,加入tbb并行编程和指令集的计算达到加速效果。目前已实现
1.阈值处理,2.图像矩的计算,3.光度立体法三维重建的算子
后续有需求可以进行开发。
以下算子是估计光源的倾斜度,计算结果和halcon的结果一致
#inlude<opencv2\core.hpp>
#include<opencv2\highgui.hpp>
#include<opencv2\opencv.hpp>
using namesapce cv;
using namespace std;
/*
brief: 估计光源的倾斜度
parameter:
SrcImage 源图像
Tilt 光源与x轴在xy平面的夹角(倾斜度)
*/
void EstimateTiltZc(Mat SrcImage,float& Tilt)
{
int nSrcWidth = SrcImage.cols;
int nSrcHeight = SrcImage.rows;
uchar* SrcData = SrcImage.ptr<uchar>(0);
double Tangent = pow(cos(45*PI/180),3)/2;
double Tangent1 = pow(cos(45*PI/180),4);
double Sine = sin(45*PI/180);
double XMean=0.,YMean=0.,Nomr,XSum,YSum;
if(nSrcHeight-1>1)
{
for(int i=nSrcHeight-2;i>0;i--)
{
uchar* SrcPtrPre = SrcData+(i-1)*nSrcWidth;
uchar* SrcPtrCur = SrcData+i*nSrcWidth;
uchar* SrcPtrNext = SrcData+(i+1)*nSrcWidth;
for(int j=0;j<nSrcWidth-2;j++)
{
//x在八邻域方向的差分(分别和中心的差分)
XSum =Tangent1*(SrcPtrCur[j+2]-SrcPtrCur[j+1])+
Tangent*(SrcPtrPre[j+2]-SrcPtrCur[j+1])*Sine+
(-Tangent)*(SrcPtrPre[j]-SrcPtrCur[j+1])*Sine+
(-Tangent1)*(SrcPtrCur[j]-SrcPtrCur[j+1])*Sine+
(-Tangent)*(SrcPtrNext[j]-SrcPtrCur[j+1])*Sine+
Tangent*(SrcPtrNext[j+2]-SrcPtrCur[j+1])*Sine;
//y在八邻域方向的差分(分别和中心的差分)
YSum =Tangent*(SrcPtrPre[j+2]-SrcPtrCur[j+1])*Sine+
Tangent1*(SrcPtrPre[j+1]-SrcPtrCur[j+1])+
Tangent*(SrcPtrPre[j]-SrcPtrCur[j+1])*Sine+
(-Tangent)*(SrcPtrNext[j]-SrcPtrCur[j+1])*Sine+
(-Tangent1)*(SrcPtrNext[j+1]-SrcPtrCur[j+1])+
(-Tangent)*(SrcPtrNext[j+2]-SrcPtrCur[j+1])*Sine;
Nomr = sqrt(XSum*XSum+YSum*YSum);
if(Nomr>=0.0000001)
{
XMean=XMean+XSum /Nomr;
YMean=YMean+YSum /Nomr;
}
}
}
Tilt = atan2(YMean,XMean)*180/3.141592653589793;
}
else
{
Tilt=0.f;
}
}
如有需要添加微信:lsj760814862