（Matlab)基于量子粒子群的二维大津图像分割

2893541647,可以交流下，加我时请说csdn

1个回答

`````` void ImageBinarization(IplImage *src)
85.{   /*对灰度图像二值化，自适应门限threshold*/
86.    int i,j,width,height,step,chanel,threshold;
87.    /*size是图像尺寸，svg是灰度直方图均值，va是方差*/
88.    float size,avg,va,maxVa,p,a,s;
89.    unsigned char *dataSrc;
90.    float histogram[256];
91.
92.    width = src->width;
93.    height = src->height;
94.    dataSrc = (unsigned char *)src->imageData;
95.    step = src->widthStep/sizeof(char);
96.    chanel = src->nChannels;
97.    /*计算直方图并归一化histogram*/
98.    for(i=0; i<256; i++)
99.        histogram[i] = 0;
100.    for(i=0; i<height; i++)
101.        for(j=0; j<width*chanel; j++)
102.        {
103.            histogram[dataSrc[i*step+j]-'0'+48]++;
104.        }
105.        size = width * height;
106.        for(i=0; i<256; i++)
107.            histogram[i] /=size;
108.        /*计算灰度直方图中值和方差*/
109.        avg = 0;
110.        for(i=0; i<256; i++)
111.            avg += i*histogram[i];
112.        va = 0;
113.        for(i=0; i<256; i++)
114.            va += fabs(i*i*histogram[i]-avg*avg);
115.        /*利用加权最大方差求门限*/
116.        threshold = 20;
117.        maxVa = 0;
118.        p = a = s = 0;
119.        for(i=0; i<256; i++)
120.        {
121.            p += histogram[i];
122.            a += i*histogram[i];
123.            s = (avg*p-a)*(avg*p-a)/p/(1-p);
124.            if(s > maxVa)
125.            {
126.                threshold = i;
127.                maxVa = s;
128.            }
129.        }
130.        /*二值化*/
131.        for(i=0; i<height; i++)
132.            for(j=0; j<width*chanel; j++)
133.            {
134.                if(dataSrc[i*step+j] > threshold)
135.                    dataSrc[i*step+j] = 255;
136.                else
137.                    dataSrc[i*step+j] = 0;
138.            }
139.}

``````

#include <stdio.h> #include <string> #include "opencv2/highgui/highgui.hpp" #include "opencv2/opencv.hpp" using namespace std; using namespace cv; // 大津法函数实现 int OTSU(cv::Mat srcImage) { int nCols = srcImage.cols; int nRows = srcImage.rows; int threshold = 0; // 初始化统计参数 int nSumPix[256]; float nProDis[256]; for (int i = 0; i < 256; i++) { nSumPix[i] = 0; nProDis[i] = 0; } // 统计灰度级中每个像素在整幅图像中的个数 for (int i = 0; i < nCols; i++) { for (int j = 0; j < nRows; j++) { int x = srcImage.at<uchar>(i, j); ** // 此处出错** nSumPix[x]++; } } // 计算每个灰度级占图像中的概率分布 for (int i = 0; i < 256; i++) { nProDis[i] = (float)nSumPix[i] / (nCols * nRows); } // 遍历灰度级[0,255],计算出最大类间方差下的阈值 float w0, w1, u0_temp, u1_temp, u0, u1, delta_temp; double delta_max = 0.0; for (int i = 0; i < 256; i++) { // 初始化相关参数 w0 = w1 = u0_temp = u1_temp = u0 = u1 = delta_temp = 0; for (int j = 0; j < 256; j++) { //背景部分 if (j <= i) { // 当前i为分割阈值，第一类总的概率 w0 += nProDis[j]; u0_temp += j * nProDis[j]; } //前景部分 else { // 当前i为分割阈值，第一类总的概率 w1 += nProDis[j]; u1_temp += j * nProDis[j]; } } // 分别计算各类的平均灰度 u0 = u0_temp / w0; u1 = u1_temp / w1; delta_temp = (float)(w0 *w1* pow((u0 - u1), 2)); // 依次找到最大类间方差下的阈值 if (delta_temp > delta_max) { delta_max = delta_temp; threshold = i; } } return threshold; }

Java学习的正确打开方式

linux系列之常用运维命令整理笔录

Python 基础（一）：入门必备知识

Python十大装B语法
Python 是一种代表简单思想的语言，其语法相对简单，很容易上手。不过，如果就此小视 Python 语法的精妙和深邃，那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点，并附上详细的实例代码。如能在实战中融会贯通、灵活使用，必将使代码更为精炼、高效，同时也会极大提升代码B格，使之看上去更老练，读起来更优雅。 1. for - else 什么？不是 if 和 else 才

2019年11月中国大陆编程语言排行榜
2019年11月2日，我统计了某招聘网站，获得有效程序员招聘数据9万条。针对招聘信息，提取编程语言关键字，并统计如下： 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7

SQL-小白最佳入门sql查询一

“狗屁不通文章生成器”登顶GitHub热榜，分分钟写出万字形式主义大作

《程序人生》系列-这个程序员只用了20行代码就拿了冠军

11月8日，由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办，科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。 　　区块链技术被认为是继蒸汽机、电力、互联网之后，下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力，电力解决了人类基本的生活需求，互联网彻底改变了信息传递的方式，区块链作为构造信任的技术有重要的价值。 　　1...

【技巧总结】位运算装逼指南

【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块（文章最后附有源码） 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁，现如今各大云服务平台横空出世，市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统，而本人家里就有人在用烟草销售系统，直接在网上完成挑选、购买与提交收货点，方便又快捷。 试想，若没有烟草销售系统，本人家人想要购买烟草，还要独自前往药...
8年经验面试官详解 Java 面试秘诀

1.两种思维方式在求职面试中，经常会考察这种问题：北京有多少量特斯拉汽车？某胡同口的煎饼摊一年能卖出多少个煎饼？深圳有多少个产品经理？一辆公交车里能装下多少个乒乓球？一个正常成年人有多少根头发？这类估算问题，被称为费米问题，是以科学家费米命名的。为什么面试会问这种问题呢？这类问题能把两类人清楚地区分出来。一类是具有文科思维的人，擅长赞叹和模糊想象，它主要依靠的是人的第一反应和直觉，比如小孩...

so easy！ 10行代码写个"狗屁不通"文章生成器

MySQL数据库总结

20行Python代码爬取王者荣耀全英雄皮肤

2019年互联网寒冬，大批企业开始裁员，下图是网上流传的一张截图： 裁员不可避免，那如何才能做到不管大环境如何变化，自身不受影响呢？ 我们先来看一个有意思的故事，如果西游记取经团队需要裁员一名，会裁掉谁呢，为什么？ 西游记团队组成： 1.唐僧 作为团队teamleader，有很坚韧的品性和极高的原则性，不达目的不罢休，遇到任何问题，都没有退缩过，又很得上司支持和赏识(直接得到唐太宗的任命，既给袈...
iOS Bug 太多，苹果终于坐不住了！