基本全局阈值处理

本篇主要讲全局阈值的处理

使用的方法主要是迭代法

使用迭代法的主要步骤
1:确定一个全局阈值T(一般初始值为整幅图像的平均值,书上这么说的)
2:用T将图像分割成两类,分别求两类的均值m1和m2,得到T1=(m1+m2)/2
3:取T和T1的差值,如果要小于预定义参数△T(预定义参数不知道如何设置),则取为阈值,反之重复步骤2,3

也是照着被人的代码写的,结合自己自己理解,但是感觉这种方法没有多大的用,有经验的大神指点下

在这里插入代码片
void Iteration_Threshold(unsigned char *src_image, unsigned char *dst_iamge, int height, int width, int delt)
{
	int i = 0, j = 0;
	double image_sum = 0.0;
	double image_ave = 0.0;
	double image_ave1 = 0.0;
	int index = 0;

	double m1     = 0.0, m2     = 0.0;
	double m1_sum = 0.0, m2_sum = 0.0;
	int    m1_num = 0,   m2_num   = 0;

	unsigned char *psrc_image = src_image;
	unsigned char *pdst_image = dst_iamge;

	//求所有像素的和
	for (i = 0; i < height; i++)
	{
		for (j = 0; j < width; j++)
		{
			index = i * width + j;
			image_sum += psrc_image[index];
		}
	}
	//求平均灰度值
	image_ave = image_sum / (double)(height * width);

	for (i = 0; i < height; i++)
	{
		for (j = 0; j < width; j++)
		{
			index = i * width + j;
			if (psrc_image[index] <= image_ave)
			{
				m1_sum += psrc_image[index];
				m1_num++;
			}
			else
			{
				m2_sum += psrc_image[index];
				m2_num++;
			}
		}
	}
	//平均值
	if (m1_num != 0)
		m1 = m1_sum / m1_num;

	if (m2_num != 0)
		m2 = m2_sum / m2_num;

	image_ave1 = 0.5*(m1 + m2);

	while (fabs(image_ave-(0.5*(m1 + m2))) > delt)
	{
		image_ave = 0.5*(m1 + m2);
		m1_sum = 0.0;
		m2_sum = 0.0;
		m1_num = 0;
		m2_num = 0;
		for (i = 0; i < height; i++)
		{
			for (j = 0; j < width; j++)
			{
				index = i * width + j;
				if (psrc_image[index] <= image_ave)
				{
					m1_sum += psrc_image[index];
					m1_num++;
				}	
				else
				{
					m2_sum += psrc_image[index];
					m2_num++;
				}			
			}
		}
		//平均值
		if (m1_num != 0)
			m1 = m1_sum / m1_num; 

		if (m2_num != 0)
			m2 = m2_sum / m2_num;
	}

	for (i = 0; i < height; i++)
	{
		for (j = 0; j < width; j++)
		{
			index = i * width + j;
			if (psrc_image[index] > image_ave)
				pdst_image[index] = 0xff;
			else 
				pdst_image[index] = 0;
		}
	}
}
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值