Сегментация клеток изображений культуры клеток: неправильная классификация фоновых пикселей - PullRequest
1 голос
/ 10 октября 2019

Мне нужно сегментировать некоторые ячейки изображений культур клеток, и у меня есть некоторые проблемы с некоторыми фоновыми областями, ошибочно классифицированными как передний план.

У меня есть некоторые хорошие результаты, используя функцию imbothat matlab для вычитания фона (таммного равномерного освещения), а затем gmm для классификации в 2 областях (фон против ячеек).

Однако imbothat делает некоторые фоновые пиксели очень похожими на области ячеек, а затем gmm (бинаризацияпорог может сильно отличаться для разных изображений, и я не хочу субъективно выбирать его) выполняет неверную классификацию.

У кого-нибудь есть идеи, как решить эту проблему?

Я пробовалдобавление некоторых дополнительных данных к gmm (кроме Igraywobvd), таких как stdfilts или entropyfilts, без улучшения результатов.

Если я уменьшу strel до 20 (илименьше) эти "проблемные" фоновые области не очень выделены, но я теряю много областей ячеек ...

Это оригинальное изображение:

image

Это последовательность, которую я получаю (указывая неправильные классифицированные регионы):

https://ibb.co/X8KY98V

Мой код Matlab ниже:

for  jpg_file=1:length(jpgsinfolder)

I=original_images{jpg_file}; %figure; imshow(original)
Igray=rgb2gray(I); %figure; imshow(Igray)

%Substract background
Igraywob=imbothat(imadjust(Igray), strel('disk',50)); %figure; 
imshow(Igraywob)

%GMM 
%Convert input images to double vectors and generate the dataset
Igraywobvd=double(Igraywob(:));
%Add data to the final dataset
gmm_dataset=horzcat(Igraywobvd);
%GMM
opt = statset('MaxIter',15000,'TolFun',1e-6);
gmm =fitgmdist(gmm_dataset,2,'Options',opt,'CovType','diagonal','RegularizationValue',0.01);
 %----Probability of our pixels to belong to the fitted distributions
prob = gmm.posterior(gmm_dataset);
%------save labels of the major probability
[val, labels_gmm] = max(prob,[],2); 
%Reshape vector with the original image size
labels_gmm=reshape(labels_gmm,size(Igray,1),size(Igray,2));  %figure; 
imagesc(labels_gmm2)
%Chose the labels with highest intensity (corresponding to the cells)
med1=mean2(Igray(labels_gmm==1));
med2=mean2(Igray(labels_gmm==2));
if med1>med2
    labels_gmm(labels_gmm==1)=0;
    labels_gmm(labels_gmm==2)=1;
else
    labels_gmm(labels_gmm==1)=1;
    labels_gmm(labels_gmm==2)=0;
end
%Binarization
labels_gmm_bin=labels_gmm>0;  %figure; imshow(labels_gmm)
%Delete small objects (artifacts)
labels_gmm_op=bwareaopen(labels_gmm_bin, 500); %figure; imshow(labels_gmm_op)
%Close small holes inside the cells
cellmask=imclose(labels_gmm_op, strel('disk',1));

%Can see the final result:
cellmask_results = labeloverlay(Igray,cellmask,'Transparency',0.7); 
figure(jpg_file); imshow(cellmask_results)

end
...