各项异性扩散滤波 -- OpenCV实现

/***********************************
*功能 -- 各项异性扩散滤波
*by 垚  
*visual studio 2010 & windows 7 ultimalte
************************************/
#include <opencv2\core\core.hpp>

void anisotropic_diffusion(cv::Mat &out, cv::Mat &in, int k, float lambda)
{
	int i, j;
	int iter = 20;
	int nRow = in.rows, nCol = in.cols;
	float ei, si, wi, ni;
	float ce, cs, cw, cn;

	cv::Mat tmp = in.clone();
	unsigned char *pin = in.data;
	unsigned char *ptmp = tmp.data;
	unsigned char *pout = out.data;

	for(int n = 0; n < iter; n++)
	{
		for(i = 1; i < nRow-1; i ++)
			for(j = 1; j < nCol-1; j++)
			{
				float cur = ptmp[i*nCol + j];
				ei = ptmp[(i-1)*nCol + j] - cur;
				si = ptmp[i*nCol + j + 1] - cur;
				wi = ptmp[(i+1)*nCol + j] - cur;
				ni = ptmp[i*nCol + j - 1] - cur;

				ce = exp(-ei*ei/(k*k));
				cs = exp(-si*si/(k*k));
				cw = exp(-wi*wi/(k*k));
				cn = exp(-ni*ni/(k*k));

				pout[i*nCol + j] = cur + lambda*(ce*ei + cs*si + cw*wi + cn*ni);
			}
		out.copyTo(tmp);
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值