ObjectOriented: Object Oriented Segmentation of Cell Nuclei in Fluorescence Microscopy Images

This work introduces a new nucleus segmentation algorithm that relies on using gradient information not at the pixel-level but at the object-level. To this end, it proposes to decompose an image into smaller homogeneous subregions, define edge-objects at four different orientations to encode the gradient information at the object-level, and devise a merging step, in which the edge-objects vote for subregion pairs along their orientations and the pairs are iteratively merged if they get sufficient votes from multiple orientations.

The source codes are provided here.

NOTE: The following source codes and executable are provided for research purposes only. The authors have no responsibility for any consequences of use of these source codes and the executable. If you use any part of these codes, please cite the following paper.

  • C. F. Koyuncu, R. Cetin-Atalay and C. Gunduz-Demir, “Object oriented segmentation of cell nuclei in fluorescence microscopy images”, Cytometry: Part A, 93A(10):1019-1028, 2018.

Please contant Can Fahrettin Koyuncu for further questions.

Source code

The program is available for Matlab. You need to call the objectOrientedSegmentation function in Matlab. This function uses Matlab codes as well as C++ codes, which should first be compiled by the mex compiler of Matlab.

For the first use of this program, please run the makeAll.m script once. This script adds necessary folders into the Matlab path. Then, it compiles the C++ codes by the mex compiler and creates two executable functions that can directly be called from Matlab. The name of these executables are objOrientSegm, which contains the main part of the segmentation code, and slicmex, which runs the SLIC superpixel generation algorithm.

The objectOrientedSegmentation function has the following prototype:

function segmRes = objectOrientedSegmentation(inputName, tSize, dMax, tVote, tArea)

in which

inputName : Name of the RGB image file.
tSize : Minimum height/width for a component to be an edge-object.
dMax : Maximum distance within which an edge-object can vote for a subregion.
tVote : Minimum score that a subregion pair should take from at least one vertical (left or right) and at least one horizontal (top or bottom) edge type to be qualified for merging.
tArea : Minimum area for a subregion to be a nucleus.
segmRes : Output segmentation map. Pixels of the same cell nucleus are labeled with the same integer, where labels are from 1 to N. Background pixels are labeled with 0.

Example use

result = objectOrientedSegmentation (‘hepg2_sample.jpg’, 5, 20, 0.1, 400);