《数字图像处理》学习笔记(八)--全局阈值分割

   到今天已经学了将近一周的数字图像了,感觉路途非常遥远,要学的东西太多了,一直感觉自己挺笨的,没关系我还是很有热情。大笑

   因为以前从来没学过数字图像处理,我的帖子大部分都是很基础的东西,和那些小牛比起来真是自惭形秽啊。。。但我们想总有和我一样刚接触这个领域的同学,也许我写的东西对他们没有任何用处,可也许有用呢敲打说了一些废话开始吧。

  全局阈值分割图像应该是图像分割里最简单的了,思想是来以直方图的波谷为阈值对图像进行对象和背景的分割,很简单的算法就不详细展开了

#include "dipHeader.h"

	void threshold(IplImage* isrc, IplImage* idst)
	{
		IplImage* g1 = cvCreateImage(cvGetSize(isrc),8,1);//大于T
		IplImage* g2 = cvCreateImage(cvGetSize(isrc),8,1);
		double T,Temp, min,max;
		CvScalar mean1 ;
		CvScalar mean2 ;
		
		cvMinMaxLoc(isrc,&min,&max);
		
		T=0.5*(max+min);
		
		bool run = true;
		
		while(run)
		{
			//cvThreshold(src,g,(double)T,255,CV_THRESH_BINARY);
			cvZero(g1);
			cvZero(g2);
			for (int x=0; x<isrc->height;x++)
			{
				for (int y=0;y<isrc->width;y++)
				{
					if (isrc->imageData[x*isrc->widthStep+y]>T)
					{
						g1->imageData[x*g1->widthStep+y] = isrc->imageData[x*isrc->widthStep+y];
					}
					else
					{
						g2->imageData[x*g2->widthStep+y] = isrc->imageData[x*isrc->widthStep+y];
					}	
				}
			}
			
			mean1=cvAvg(g1);
			mean2=cvAvg(g2);
			Temp = 0.5*(mean1.val[0]+mean2.val[0]);
			run = fabs(T-Temp)>0.5;
			T=Temp;
		}
		cvThreshold(isrc,idst,T,255,CV_THRESH_BINARY_INV);
	}


void main()
{
	IplImage* src = cvLoadImage("quanju.tif");

	IplImage* g = cvCreateImage(cvGetSize(src),8,src->nChannels);
	cvNamedWindow("src",1);
	cvShowImage("src",src);
	//cvWaitKey(0);
	
	
	IplImage* temp1d = cvCreateImage(cvGetSize(src),8,1);
	IplImage* temp2d = cvCreateImage(cvGetSize(src),8,1);
	IplImage* temp3d = cvCreateImage(cvGetSize(src),8,1);
	IplImage* temp1 = cvCreateImage(cvGetSize(src),8,1);
	IplImage* temp2 = cvCreateImage(cvGetSize(src),8,1);
	IplImage* temp3 = cvCreateImage(cvGetSize(src),8,1);
	cvSplit(src,temp1,temp2,temp3,0);

	threshold(temp1,temp1d);
	threshold(temp2,temp2d);
	threshold(temp3,temp3d);

	cvMerge(temp1d,temp2d,temp3d,0,g);
	cvNamedWindow("g",1);
	cvShowImage("g",g);
	cvWaitKey(0);
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值