a = imread('11.jpg');
a1 = im2double(a);
a2 = rgb2gray(a1);
imshow(a2);
title('原图像')
%%通过小波去噪处理,防止混有高斯噪声
[thr,sorh,keepapp] = ddencmp('den','wv',a2);
a3 = wdencmp('gbl',a2,'sym4',2,thr,sorh,keepapp);
%%采用自应用中值滤波对图像处理,以防止混有椒盐噪声,即使图像没有噪声,经处理后
得到的图像也不会失真
a4 = adpmedian(a3, 7);
%%%使用形态学重构来去除图像中复杂的背景
f_obr = imreconstruct(imerode(a4, ones(1, 70)), a4);
f_o = imopen(a4, ones(1, 70));
f_thr = imsubtract(a4, f_obr);
f_th = imsubtract(a4, f_o);
g_obr = imreconstruct(imerode(f_thr, ones(1, 15)), f_thr);
g_obrd = imdilate(g_obr, ones(1, 7));
f2 = imreconstruct(min(g_obrd, f_thr), f_thr);
%%采用边缘检测算子prewitt并设置阈值
g = edge(f2, 'prewitt',0.095);
%%得到边缘信息
B = boundaries(g);
B1 = cellfun('length', B);
%%尽量去除外界边缘
for i = 1:length(B1)
if B1(i)<=60
for j = 1:B1(i)
k = B{i}(j, 1);
h = B{i}(j, 2);
g(k, h) = 0;
end
end
end
%%再次求取边缘信息
B = boundaries(g);
B1 = cellfun('length', B);
%%%水平或列扫描得到所有边缘信息,并把坐标保存下来,从有药的位置开始定位,这里
其实只需要用到第一个点的信息
xx = [];
xy = [];
[M, N] = size(g);