Question
Asked 19th Oct, 2013

The best way of separating overlapping objects?

I'd like to know if there is any way to separate these cells and retrieve their original shape?

Most recent answer

29th Oct, 2013
Chanukya Krishna Chama
Sun Pharma Advanced Research Company
@Lambert: May be the following algorithm would work
1) Localize each cells by separating overlapping ones (as shown in figure)
2) Detect cells need repairing to restore original shape.
3) Option1: Fit an ellipse enclosing the object and extract the actual shape of this object from original image
Option2: a) Divide the object into few blocks for e.g., 4 (as shown in figure) and locate the blocks needed further repairing for e.g., blocks 2,4 as shown in fig.
b) Try to get the shape of a block by mirroring its adjacent one which has perfect shape.
Ref: http://www.ncbi.nlm.nih.gov/pubmed/23076539 (see page no.7 for idea of reflection to repair)
Option3: Detect convex and concave points of the object contour and restore original shape of the object
Ref: http://www.ncbi.nlm.nih.gov/pubmed/23053904 (see page 5 for Discrimination of Concavity and Convexity of Boundary Points Based on Chain Code Difference)
For shape analysis, see also
Biomedical Image Analysis book by Rangaraj M. Rangayyan available on google books
2 Recommendations

Popular Answers (1)

22nd Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
The replies from Changming Sun & Stephan Irgenfried deal with separating partially overlapping objects. The shape of them is NOT recovered.
I liked Changming's article, but at best it will give you following segmentation:
5 Recommendations

All Answers (17)

19th Oct, 2013
Mahmood Davoodianidaliki
University of Tehran
That's a pretty noisy image you have there!.
I think if you want to develop your own algorithm and ignoring previous studies then:
1. Edge extraction is inevitable though this much noise might pose some problems.
2. If shapes are always similar to circle, using ant algorithm as base might help by using the constrain of moving on a pseudo-circle shape.
3. If due to the noise level and transparency, a few problems occur, then you might need to devide your image into smaller parts and process them to increase contrast.
By the way, using previous studies might help you in just two cases. you're good at programming or there are some codes already developed.
3 Recommendations
20th Oct, 2013
Arturo Geigel
Independent Researcher Puerto Rico
I would try:
a) greyscale conversion
b) thresholding
c)Hough transform to detect ellipses. In this part I would check two references:
Yuen, H. K., Illingworth, J., & Kittler, J. (1989). Detecting partially occluded ellipses using the Hough transform. Image and Vision Computing, 7(1), 31-37.
and
Chia, A. Y., Rajan, D., Leung, M. K., & Rahardja, S. (2008, October). A split and merge based ellipse detector. In Image Processing, 2008. ICIP 2008. 15th IEEE International Conference on (pp. 3212-3215). IEEE.
2 Recommendations
20th Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
A lot of noise has been distorted by jpeg compression artifacts. Hopefully you have better original images. If you have, I would first try to get rid of some of that noise; maybe a de-speckle filter.
Thresholding will not work because on the left there are parts outside the cells that are darker then the right side of the cells.
The Hough transform will give you the best fitting ellipses:
- It will find more than one per cell
- It will be very noisy as well
- It will NOT give you the exact shapes
Since some boundaries can hardly be seen by the human eye (where cells overlap), and maybe three or more overlapping cells might occur in other images, I think the segmentation cannot be done using 'simple' image processing techniques.
Maybe ask to question to Machine Learning guru's?
2 Recommendations
21st Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
@Chanukya,
That previous post is about counting the number of objects. Mahsa wants to recover their shapes as well, which is much harder to do, especially when one can not (or hardly) see the boundary. It will need some modeling or machine learning to accomplish that.
However, if you can do it using simple image processing techniques, post your code here please!
21st Oct, 2013
Chanukya Krishna Chama
Sun Pharma Advanced Research Company
@Lambert
Apart from counting application, the previous post has replies related to separating overlapping objects. Even i have replied there, you may check them.
Coming to application on present image, simple image processing techniques don't work here. Mean Shift Clustering could be used as initial step which provides edge preserving smoothing.
"Mean Shift: A Robust Approach Toward Feature Space Analysis". IEEE Transactions on Pattern Analysis and Machine Intelligence (IEEE) 24 (5): 603–619.
You may also check the following result attached below which is obtained using "Human guided scribble based interactive segmentation tool".
Links:
The tool has an external API that allows it to be extended with additional segmentation algorithms through the use of plugins
21st Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
The middle cell seems strange to me. I think -but cannot see clearly- the border should be something like this (red). Also note that the cells became smaller (blue arrow).
22nd Oct, 2013
Chanukya Krishna Chama
Sun Pharma Advanced Research Company
@Lambert: Once has to do post processing of the above result to get middle cell which is overlapped with other two cells. There is a lot of inter-observer variability. So an expert validated ground truth is also required to know the exact shape, size and location of cells otherwise it is difficult to design an segmentation algorithm & judge its result. For better visualisation of cell boundaries, you may see the mask and other segmentation results from following link:
1 Recommendation
22nd Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
@Chanukya: you are absolutely right about the observer variability of the ground truth. Still I am not convinced that post-processing (using 'ordinary' image processing techniques without user interaction) will give you the shape of the middle cell.
How would you do it?
I think you need to do some modeling.
Or -if a rough estimate of the shape is good enough- you might convert the detected known boundary of the troublesome cell to vertices and line segments, and extrapolate it by minimizing the curvature (angular deficit) at all the newly introduced vertices.
1 Recommendation
22nd Oct, 2013
Chanukya Krishna Chama
Sun Pharma Advanced Research Company
@Lambert You are right and a better post-processing algorithm could be with user in loop (minimal user interaction)
22nd Oct, 2013
Mahmood Davoodianidaliki
University of Tehran
About results posted by @ Chanukya Krishna Chama
Given the results, I'm not sure that modifying program to be adapted to this problem is an easy process. Especially considering features that segmentation algorithms work based on them. Actually developing an algorithm based on this kind of images is a lot easier than modifying an already developed coed. Though using previous knowledge can ease the process.
And idea mentioned by @Lambert Zijp that "I think you need to do some modeling."
It's right and somehow inevitable to do so. and given the conditions algorithm will be iterative.
initial shapes are extracted with a few parameters such as center and radius and then by moving pixels real shape must be extracted.
22nd Oct, 2013
Chanukya Krishna Chama
Sun Pharma Advanced Research Company
As from the previous post, replies from Changming Sun & Stephan Irgenfried could perfectly work for your image.
C. Zhang, C. Sun, R. Su, and T. D. Pham, Segmentation of Clustered Nuclei Based on Curvature Weighting, In Image and Vision Computing New Zealand, Dunedin, New Zealand, 26-28 November 2012, pp.49-54.
22nd Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
The replies from Changming Sun & Stephan Irgenfried deal with separating partially overlapping objects. The shape of them is NOT recovered.
I liked Changming's article, but at best it will give you following segmentation:
5 Recommendations
23rd Oct, 2013
Sandor Szenasi
Óbudai Egyetem
Maybe you would try some "ellipse fitting algorithm" instead of contour detection. There are several publications about cell nuclei separation using ellipse fitting.
Another approach can be the detection of concave/convex parts of the contour, this can help the seperation of the overlapping objects.
2 Recommendations
23rd Oct, 2013
Lambert Zijp
Netherlands Cancer Institute
@Chanukya & Sandor: could you please indicate how to recover the original SHAPE !! That is what Mahsa asks for; it is not about counting or some arbitrary separation.
1 Recommendation
28th Oct, 2013
Joachim Pimiskern
BTW, just seen on Physorg:
Seems to be either ellipse fitting or an
Active Contour Model, or a combination.
More info on a researcher's (Ricard Delgado-Gonzalo) publication list:
Regards,
Joachim
2 Recommendations
Can you help by adding an answer?

Similar questions and discussions

How can I separate the overlapping cell?
Question
5 answers
  • izyan hanum mohad ibrahimizyan hanum mohad ibrahim
hai  i need to separating the overlapping in this sputum cell. i have done rgb to hsv binary and morphology. now i dont know how to start to separate the overlapped.
%Try thresholding in HSV color space to get purple blobs but not black blobs or yellow background.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 14;
figure;
set(gcf, 'Renderer', 'Painters'); % or zbuffer or opengl.
%===============================================================================
% Read in a color demo image.
folder = 'C:\Users\User\Pictures';
baseFileName = 'N5.jpg';
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
if ~exist(fullFileName, 'file')
% Didn't find it there. Check the search path for it.
fullFileName = baseFileName; % No path this time.
if ~exist(fullFileName, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
rgbImage = imread(fullFileName);
% Get the dimensions of the image. numberOfColorBands should be = 3.
[rows, columns, numberOfColorBands] = size(rgbImage);
% Display the original color image.
figure(1),subplot(3, 3, 2);
imshow(rgbImage);
title('Original Sputum Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'Outerposition', [0, 0, 1, 1]);
% Extract the individual red, green, and blue color channels.
hsv = rgb2hsv(rgbImage);
hImage = hsv(:, :, 1);
sImage = hsv(:, :, 2);
vImage = hsv(:, :, 3);
% Display the images
figure(1),subplot(3, 3, 4);
imshow(hImage, []);
title('Hue Image', 'FontSize', fontSize);
figure(1),subplot(3, 3, 5);
imshow(sImage, []);
title('Saturation Image', 'FontSize', fontSize);
figure(1),subplot(3, 3, 6);
imshow(vImage, []);
title('Value Image', 'FontSize', fontSize);
% Let's compute and display the histogram.
[pixelCount, grayLevels] = imhist(hImage);
figure(1),subplot(3, 3, 7);
bar(grayLevels, pixelCount);
grid on;
title('Histogram of Hue image', 'FontSize', fontSize);
xlim([0 grayLevels(end)]); % Scale x axis manually.
% Let's compute and display the histogram.
[pixelCount, grayLevels] = imhist(sImage);
figure(1),subplot(3, 3, 8);
bar(grayLevels, pixelCount);
grid on;
title('Histogram of Saturation image', 'FontSize', fontSize);
xlim([0 grayLevels(end)]); % Scale x axis manually.
% Let's compute and display the histogram.
[pixelCount, grayLevels] = imhist(vImage);
figure(1),subplot(3, 3, 9);
bar(grayLevels, pixelCount);
grid on;
title('Histogram of Value image', 'FontSize', fontSize);
xlim([0 grayLevels(end)]); % Scale x axis manually.
% Manually threshold the images usinghttp://www.mathworks.com/matlabcentral/fileexchange/29372-thresholding-an-image
% [lowThreshold, highThreshold] = threshold(.1, .9, vImage);
% Get a binary image by thresholding and combining the different channels.
hueBinary = hImage > 0.2 | hImage < 0.1;
saturationBinary = sImage > 0.22;
valueBinary = vImage > 0.28 & vImage < 0.9;
binaryImage = hueBinary & saturationBinary & valueBinary;
% Clear up by getting rid of particles less than 400 pixels in area.
binaryImage = bwareaopen(binaryImage, 400);
% Fill any holes in the blobs................................opening
binaryImage = imfill(binaryImage, 'holes');
figure(2),subplot(2, 2, 1);
imshow(binaryImage, []);
axis on;
title('Opening', 'FontSize', fontSize);
% morphology using closing
se = strel('disk',10);
afterclosing = imclose(binaryImage,se);
figure(2), subplot (2,2,2), imshow(afterclosing,[]);
axis on;
title('Closing','FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'Outerposition', [0, 0, 1, 1]);

Related Publications

Article
The Mayo Biomedical Imaging Resource (BIR) conducts research into and development of image analysis, visualization, and measurement capabilities and software tools for biomedical imaging applications. The design goal for these tools includes full interactivity, yet some tools are both compute bound and time sensitive. Therefore, effective use of th...
Article
Automatic biomedical image processing has enjoyed increased popularity of late, primarily because it can be used to enhance images to measure and count accurately and quickly in various types of applications. Preliminary background and basic terminology commonly used in biomedical image processing will be reviewed. Among these are sources and forms...
Conference Paper
Full-text available
Two new techniques are described and illustrated. The first is a variation of the pyramidal algorithm. In this technique a set of filtering operations is used to enhance the image. The technique described here is simple and requires less computational power. The second describes a new pre-compensation algorithm based on the ocular point spread func...
Got a technical question?
Get high-quality answers from experts.