halcon算子c++实现

通过反汇编实现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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值