x射线图像去坏点算法

11 篇文章 5 订阅
3 篇文章 0 订阅
void ShotNoise(unsigned short *data,int width,int height)
{
	int hei_1 = height - 1;
	int wid_1 = width - 1;
	double value,tmpval;
	unsigned short *pixel=new unsigned short[width*height];
	memcpy(pixel,data,width*height*2);

	if (hei_1>1)
	{
		//第二行第二个
		unsigned short * des1_1=data+width+1;
		unsigned short * src1=pixel+2;
		unsigned short * src2=pixel+width+2;
		unsigned short * src3=pixel+width+width+2;

		int i=0;
		int hei_2=hei_1-1;
		int wid_2 = wid_1 - 1;

		double d1_1,d1_2,d1_3,d2_1,d2_3,d3_1,d3_2,d3_3;

		for (i=0;i<hei_2;i++)
		{
			unsigned short *s1=src1;
			unsigned short *s2=src2;
			unsigned short *s3=src3;
			unsigned short *desp=des1_1;
			for (int j=0;j<wid_2;j++)
			{
				d1_1 = (double)*(s1 - 2);
				d1_2 = (double)*(s1 - 1);
				d1_3 = (double)*s1;
				d2_1 = (double)*(s2 - 2);
				d2_3 = (double)*s2;
				d3_1 = (double)*(s3 - 2);
				d3_2 = (double)*(s3 - 1);
				d3_3 = (double)*s3;
				value = (d3_1 + d3_3 + d3_2 + d2_3 + d2_1 + d1_3 + d1_2 + d1_1) * 0.125;
				tmpval=(d1_1 * d1_1+ d1_2 * d1_2+ d1_3 * d1_3+ d2_1 * d2_1+ d3_2 * d3_2+ d3_3 * d3_3+ d3_1 * d3_1+ d2_3 * d2_3);

				if ((tmpval* 0.125- value * value)* 9.0 < ((double)*(s2 - 1) - value) * ((double)*(s2 - 1) - value) ){
					*desp = (unsigned short)value;
				}
				s1++;
				s2++;
				s3++;
				desp++;
			}
			src1+=width;
			src2+=width;
			src3+=width;
			des1_1+=width;
		}
	}
	/*FILE *f=fopen("c:/1.raw","wb");
	fwrite(data,2,width*height,f);
	fclose(f);*/
	delete[] pixel;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值