摘抄自《精通MATLAB混合编程》
clear;
close all;
I = imread('F:\matlab_zone\pill.jpg') ;
figure,imshow(I);
i = rgb2gray(I) ;
figure,imshow(i);
figure,imhist(i);title('直方图');
F0 = imadjust(i,stretchlim(i),[0 1]);
%imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵)。
%J = imadjust(I,[low_in; high_in],[low_out; high_out])
% stretchlim(i)返回两个值的数组,指定归一化后的最大和最小灰度值
Ft = medfilt2(F0,[5 5]);
figure,imshow(Ft);
figure,imhist(Ft);title('直方图');
level = graythresh(Ft);%graythresh函数。该函数使用最大类间方差法得到一个阈值,
BW = im2bw(Ft,level);%也可以在workspace上面查看level的值,然后实验调整level
imshow(BW);
BW1 = edge(BW,'sobel',0.3);
imshow(BW1);
%%%%%%%%%%%%%%%膨胀填充闭合缺口%%%%%%%%%%%%%
se90 = strel ('line',7,90);
se0 = strel('line',7,0);
BW2 = imdilate(BW1,[se90,se0]);
figure,imshow(BW2);
BW3 = imfill(BW2,'holes');
figure,imshow(BW3);
%%%%%%%%%%%%删去边缘不完整的图形,即移除和边界相连通的目标%%%%%%%%%5
BW4 = imclearborder (BW3,4);
figure,imshow(BW4);
%%%%%%%%%%%%%%统计计数函数计算药丸个数%%%%%
[ labeled numpills] = bwlabel(BW4,4);
%%numpills返回连通域的个数%%
numpills