2016-08-22 4 views
0

Я использую алгоритм водораздела, чтобы попытаться сегментировать трогательные ядра. Типичное изображение может выглядеть следующим образом: enter image description here или это: enter image description hereОтрицательные значения в алгоритме Watershed, приводящие к черному изображению

Я пытаюсь применить алгоритм водораздела с этим кодом:

show(RGB_img) 


%Convert to grayscale image 
I = rgb2gray(RGB_img); 

%Take structuring element of a disk of size 10, for the morphological transformations 
%Attempt to subtract the background from the image: top hat is the 
%subtraction of the open image from the original 


%Morphological transformation to subtract background noise from the image 
%Tophat is the subtraction of an opened image from the original. Remove all 
%images smaller than the structuring element of 10 
I1 = imtophat(I, strel('disk', 10)); 

%Increases contrast 
I2 = imadjust(I1); 
%show(I2,'contrast') 
%Assume we have background and foreground and assess thresh as such 
level = graythresh(I2); 
%Convert to binary image based on graythreshold 
BW = im2bw(I2,level); 
show(BW,'C'); 



BW = bwareaopen(BW,8); 
show(BW,'C2'); 

BW = bwdist(BW) <= 1; 
show(BW,'joined'); 
%Complement because we want image to be black and background white 
C = ~BW; 
%Use distance tranform to find nearest nonzero values from every pixel 
D = -bwdist(C); 

%Assign Minus infinity values to the values of C inside of the D image 
% Modify the image so that the background pixels and the extended maxima 
% pixels are forced to be the only local minima in the image (So you could 
% hypothetically fill in water on the image 

D(C) = -Inf; 

%Gets 0 for all watershed lines and integers for each object (basins) 
L = watershed(D); 
show(L,'L'); 

%Takes the labels and converts to an RGB (Using hot colormap) 
fin = label2rgb(L,'hot','w'); 

% show(fin,'fin'); 
im = I; 

%Superimpose ridgelines,L has all of them as 0 -> so mark these as 0(black) 
im(L==0)=0; 

clean_img = L; 
show(clean_img) 

После C = ~BW; все изображение становится темным. Я считаю, что это потому, что пиксели изображения - это -inf или меньшее отрицательное число. Это есть способ обойти это, и если да, то что я могу изменить в своем коде, чтобы заставить этот алгоритм работать? Я экспериментировал тонну, и я действительно не знаю, что происходит. Любая помощь будет замечательной!

+0

Что делает команда 'show'? Я этого не понимаю. Это вещь в 2016 году? –

+0

@tasosPapastylianou show - небольшая функция, которую я написал - она ​​действительно инкапсулирует 'figure',' imshow' и добавляет метку к рисунку. Он должен быть одним и тем же дисплеем, но как 'imshow' – Sam

ответ

2

Проблема с вашей командой show. Как вы сказали в комментариях, это использует imshow под капотом. Если вы попробуете imshow, вы сразу увидите черное изображение. Однако, если вы позвоните ему с соответствующими ограничениями:

imshow(clean_img,[min(clean_img(:)), max(clean_img(:))]) 

вы увидите все, что ожидаете увидеть.

Обычно я обычно предпочитаю imagesc по этой причине. imshow делает произвольные суждения относительно того, какой диапазон для представления, и я обычно не могу беспокоиться о том, чтобы идти в ногу с ним. Я думаю, что в вашем случае ваше конечное изображение uint16, поэтому imshow выбирает для представления диапазон [1, 65025]. Поскольку все ваши значения пикселей ниже 400, они выглядят черными невооруженным глазом для этого диапазона.

+1

Вы также можете просто сделать' imshow (clean_img, []); ', который будет автоматически вычислять значения min и max и масштаб для' [0,1] 'соответственно. – rayryeng

+0

Большое спасибо, это помогло. Тем не менее, я использую еще один алгоритм, в котором 'L = waterhed (I_mod);' приходит после: 'I_eq_c = imcomplement (I_eq);' и 'I_mod = imimposemin (I_eq_c, ~ bw4 | mask_em);' После 'L' пиксели изображения установлены на 1 и, следовательно, все черные снова, любые идеи? – Sam

+0

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