采用均值、方差法实现求取图像的阈值

来源:互联网 发布:通用接口软件 编辑:程序博客网 时间:2024/06/02 20:46

算法实现:

/*************均值方差法对图像进行阈值分割*********************

***函数来源:本算法实现了论文“基于车载摄像头的前方运动***车辆检测与跟踪方法研究”提出的阈值分割算法***函数名称:cvMeanVarThreshold***函数参数:IplImage* image***函数说明:对输入图像进行两次自适应阈值分割提取彻底阴影*****************************************************/float cvMeanVarThreshold(IplImage* image){ int height = image->height; int width = image->width; int size = height * width; int row, col, i; float pixelSum[256]; for (i = 0; i < 256; i++) { pixelSum[i] = 0; } for (row = 0; row < height; row++) { for (col = 0; col < width; col++) { uchar* ptr = (uchar*)(image->imageData + image->widthStep * row + col); pixelSum[*ptr]++;//统计图像中某一灰度值的像素总数 } } float pixelsum = 0; float pixelavg1, pixelavg2; float pixelavr1 = 0.0, pixelavr2 = 0.0; float threshold1, threshold2; for (i = 0; i < 256; i++)//图像的像素值求和 { pixelsum += i*pixelSum[i]; } pixelavg1 = pixelsum / size;//均值=图像的像素值总和/图像的像素总数 printf("pixelavg1=%f\n", pixelavg1); for (i = 0; i < 256; i++)//求图像的方差 { pixelavr1 += (i - pixelavg1) * (i - pixelavg1) * pixelSum[i]; } pixelavr1 /= size; printf("pixelavr1=%f\n", pixelavr1); threshold1 = pixelavg1 - pixelavr1 / pixelavg1;//求图像的阈值t1 printf("threshold1=%f\n", threshold1); float pixelsum1 = 0, pixelNum = 0; for (i = 0; i <= threshold1; i++)//计算灰度值小于threshold1像素的平均值 { pixelNum += pixelSum[i];//灰度值小于t1的像素总数 pixelsum1 += i*pixelSum[i];//灰度值小于t1的像素值求和 } if (pixelNum != 0) {pixelavg2 = pixelsum1 / pixelNum;//灰度值小于t1的像素求均值 } printf("pixelavg2=%f\n", pixelavg2); for (i = 0; i <= threshold1; i++)//灰度值小于t1的像素求方差 { pixelavr2 += (i - pixelavg2) * (i - pixelavg2) * pixelSum[i]; } if (pixelNum != 0) {pixelavr2 /= pixelNum; } printf("pixelavr2=%f\n", pixelavr2); threshold2 = pixelavg2 - pixelavr2 / pixelavg2;//求阈值t2 printf("threshold2=%f\n", threshold2); return threshold2;}

算法的效果图像:

                                                                                                                                               效果图一


                                                                                                                                               效果图二

        我最近看了篇论文,题目为“基于车载摄像头的前方运动车辆检测与跟踪方法研究”,把里边的阈值分割算法编写了一下。在编程方面,自己是新手,希望大家帮忙指点一下,提出一些意见,使编写的代码更加优化。谢谢大家!

原创粉丝点击