求bmp 图像 黑斑检测mfc 算法解决办法

求bmp 图像 黑斑检测mfc 算法
求bmp 图像 黑斑检测mfc 算法解决办法求bmp 图像 黑斑检测mfc 算法解决办法
检测到黑斑的位置并标记出来  求高手指点
------解决思路----------------------
对所有像素求平均值
将图像每个像素减去平均值,再乘以一个大于1的系数(黑斑增强)
显示处理后的图像
------解决思路----------------------
《学习OpenCV(中文版)》
findContours
------解决思路----------------------
用自适应二值化行不,类似一楼的说法,完后得到模版,自然就可以标记了
------解决思路----------------------


84.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.}  


------解决思路----------------------
这个问题很简单,方法如下:
1,图像颜色增强,如果你是在不想做,就试试直方图均衡化;
2,一般增强后的图像中会明显看到圆形斑块,此时你可以进行二值化得到圆形斑块的信息,包括位置,质心,外接矩形,都可以算出来。
------解决思路----------------------
我用直方图均衡化试了下,效果图如下:求bmp 图像 黑斑检测mfc 算法解决办法求bmp 图像 黑斑检测mfc 算法解决办法
在做个二值化,很容易得到你要的结果。
------解决思路----------------------
二值化后检测