今天终于开学了,也意味着我终于能够静下心去做大创的项目,汲取新的知识。
数字图像处理作为专业选修课,学分重,任务多。但是我也从中了解到了更多关于图像处理的知识,内心也充满激动,哈哈哈,怕是上课的时候在窃喜:不仅学会了原理,更是早就掌握了实现的方法。废话不多说,继续上次的项目。
直方图最亮谷底阈值确定法提取细胞前景步骤
- 计算灰度图像的直方图;
- 高斯平滑直方图;
- 归一化直方图;
- 首先找到最后一个波峰,并将其对应的灰度值记为 k ;
- 如果 p(k -1) <p(k) <p(k +1) ,即 p(k) 是个极小值点,转 6;否则转 7;
- 如果 p(k) <max ,则 max =p(k) ,T =k ,转 7;否则转 8;
- k =k -1,转 5;
- 直方图最亮谷底阈值确定算法结束。
花了一晚上终于把循环做出来了,也不知道对不对,while,for,if循环让人头大,我的代码水平可能连小学生都打不过吧。以下是实现代码:
x=imread('5.2.bmp');
y=rgb2gray(x);%灰度处理
h= fspecial('gaussian',3*3,0.5);
filteredRGB=imfilter(y,h);
[m,n]=size(filteredRGB);
[cnts,x1]=imhist(filteredRGB,32);%直方图
prob=cnts/m/n;
stem(x1,prob)%归一化直方图显示
c=findpeaks(prob);
IndMin=find(diff(sign(diff(prob)))>0)+1; %获得局部最小值的位置
IndMax=find(diff(sign(diff(prob)))<0)+1;%获得局部最大值的位置
figure; hold on; box on;
plot(1:length(prob),prob);
plot(IndMin,prob(IndMin),'r^')
plot(IndMax,prob(IndMax),'k*');
legend('曲线','波峰点');
len=length(IndMax(:));
lastpeak=IndMax(len);%最后一个波峰所对应的灰度级/灰度值 k
lastpeakfrequency=prob(lastpeak);%最后一个波峰所对应灰度级的频率/值 p(k)
max=1;
while lastpeak~=1
if prob(lastpeak-1)<prob(lastpeak)<prob(lastpeak+1)
if lastpeakfrequency<max
max=prob(lastpeak);
T=lastpeak;
lastpeak=lastpeak-1;
else break
end
else lastpeak=lastpeak-1;
end
end
结果显示:
找到的阈值为23,也是细胞质区域和背景之间的分界点。