采用均值、方差法实现求取图像的阈值
来源:互联网 发布:通用接口软件 编辑:程序博客网 时间: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;}
算法的效果图像:
效果图一
效果图二
我最近看了篇论文,题目为“基于车载摄像头的前方运动车辆检测与跟踪方法研究”,把里边的阈值分割算法编写了一下。在编程方面,自己是新手,希望大家帮忙指点一下,提出一些意见,使编写的代码更加优化。谢谢大家!
- 采用均值、方差法实现求取图像的阈值
- 图像分割自适应阈值的求取
- 基于Opencv计算图像的均值和方差
- 已知背景和物体的均值方差,求最佳分割阈值
- Opencv---计算图像直方图方差和均值
- OpenMV图像处理 最大类间方差法的实现
- OpenCV 均值方差的计算
- 利用OpenCV实现图像的阈值分割
- 最大方差阈值分割(vc实现)
- 最大方差阈值分割(vc实现)
- matlab提升(1):用matlab求图像的均值和方差
- 利用matlab求图像均值和方差的几种方法
- R中验证正太分布检验及求取其方差和均值
- 大津法(最大类间方差、自适应阈值)图像分割
- 图像的阈值化-OTSU、固定阈值法、基于局部的阈值化
- 基于阈值法的图像分割技术
- 基于阈值法的图像分割技术
- MATLAB中均值、方差、均方差的计算方法
- Delphi 设置窗体无标题栏和边框
- .a 和 .so 文件的分别
- java23种设计模式总结
- 一名大学生在银行工作8年的职场感悟---功之成,非成于成功之日,盖必有所由起
- C语言常见命名规范
- 采用均值、方差法实现求取图像的阈值
- java本地接口调用基础篇二(共四篇)
- wireshark抓http包过滤
- 编写进程/线程监视器
- mac安装mysql后,启动mysql ERROR 2002 (HY000)错误解决办法
- _variant_t 转换成其他类型
- C++读书笔记之 关系运算符重载 大于号> 小于号< 等于号== 重载 overload
- Android通过http协议POST传输方式
- Stunnel 编译及使用