Учитывая изображения и вопрос, похоже, что вам не нужно обнаруживать края.
Вместо этого я бы использовал метод адаптивного порога, нашел бы каплю и, наконец, извлек из нее кромку.
Здесьэто код в Matlab, чтобы проиллюстрировать, что я имею в виду:
function FindThresh()
i = imread('c:\b.png');
figure;imshow(i);
graythresh(i)
th = graythresh(i(:,:,2))*255;
figure;imshow(i(:,:,2)>th)
i1 = imclose(i(:,:,2)>th,strel('diamond',3));
figure;imshow(i1)
e = edge(i1);
indexes = find(e);
[r,c]=ind2sub(size(i1),indexes)
figure;imshow(e)
figure;imshow(i);hold on; scatter(c,r);
end
и промежуточные результаты изображения:
Вы можете видеть, что это не идеально,но, немного улучшив его, вы получите более мощные результаты, чем при использовании обнаружения края, который не является стабильной операцией.