Подсчет чешуи ящериц

Мой друг-биолог спросил меня, могу ли я помочь ему составить программусчитать скваму (это правильный перевод?) ящериц.

Он прислал мне несколько фотографий, и я попробовал кое-что на Matlab. Для некоторых изображений это намного сложнее, чем для других, например, когда есть более темные (черные) области. По крайней мере, с моим методом. Я уверен, что я могу получить некоторую полезную помощь здесь. Как мне улучшить это? Я выбрал правильный подход?

Вот некоторые из изображений.

Я получил лучшие результаты, следуяОбработка и подсчет изображений с использованием MATLAB, Это в основном превращает изображение в черно-белое, а затем пороговое значение. Но я добавил немного эрозии.

Вот код:

img0=imread('C:...\pic.png');

img1=rgb2gray(img0);

%The output image BW replaces all pixels in the input image with luminance greater than level with the value 1 (white) and replaces all other pixels with the value 0 (black). Specify level in the range [0,1]. 
img2=im2bw(img1,0.65);%(img1,graythresh(img1));

imshow(img2)
figure;

 %erode
 se = strel('line',6,0);     
 img2 = imerode(img2,se);
 se = strel('line',6,90);   
 img2 = imerode(img2,se);
 imshow(img2)
figure;

imshow(img1, 'InitialMag', 'fit')

% Make a truecolor all-green image. I use this later to overlay it on top of the original image to show which elements were counted (with green)
 green = cat(3, zeros(size(img1)),ones(size(img1)), zeros(size(img1)));
 hold on
 h = imshow(green); 
 hold off


%counts the elements now defined by black spots on the image
[B,L,N,A] = bwboundaries(img2);
%imshow(img2); hold on;
set(h, 'AlphaData', img2)
text(10,10,strcat('\color{green}Objects Found:',num2str(length(B))))
figure;



%this produces a new image showing each counted element and its count id on top of it.
imshow(img2); hold on;
colors=['b' 'g' 'r' 'c' 'm' 'y'];
for k=1:length(B),
     boundary = B{k};
     cidx = mod(k,length(colors))+1;
     plot(boundary(:,2), boundary(:,1), colors(cidx),'LineWidth',2);
     %randomize text position for better visibility
     rndRow = ceil(length(boundary)/(mod(rand*k,7)+1));
     col = boundary(rndRow,2); row = boundary(rndRow,1);
     h = text(col+1, row-1, num2str(L(row,col)));
     set(h,'Color',colors(cidx),'FontSize',14,'FontWeight','bold');
end
figure; 
spy(A);

И вот некоторые из результатов. В одном верхнем левом углу вы можете увидеть, сколько было подсчитано.

Кроме того, я думаю, что полезно подсчитывать подсчитанные элементы зеленым, чтобы, по крайней мере, пользователь мог знать, какие из них должны быть подсчитаны вручную.

Ответы на вопрос(1)

Ваш ответ на вопрос