Tool.ZoomBestFit.action.setEnabled(canZoomBestFit());
if(view.getContext() != null)
{
- comboLabel.setEnabled((view.getContext().getMasks().size() > 0));
+ comboLabel.setEnabled((view.getContext().getSegmentObjects().size() > 0));
}
else
{
{
if(view.imageContains(mouseClickedPoint))
{
- ctx.enableClickedSegment(view.canvasToImage(mouseClickedPoint));
+ enableClickedSegment(view.canvasToImage(mouseClickedPoint));
}
repaint();
}
/**
* For storing independent Segmentation objects
*/
- private ArrayList<SegmentationMask> segmentationMaskObjects;
+ private ArrayList<SegmentationMask> segmentationObjects;
// lazy create (use getters for these fields)
private AnnotationManager annotations;
- private SegmentationMask segmentationMask;
+ private SegmentationObject segmentObject;
private Image image;
private Rectangle bounds;
private SegmentationContext(ImageData imageData, File file) {
this.imageData = imageData;
this.file = file;
- segmentationMaskObjects = new ArrayList<SegmentationMask>();
+ segmentationObjects = new ArrayList<SegmentationMask>();
}
/**
// Makes needsHighlighting <code>False</code> for all the previous segments.
disableAllSegments(false);
// Set needsHighlighting <code>True</code> for the current segment.
- segmentationMask.enabled = true;
- segmentationMaskObjects.add(segmentationMask);
+ segmentObject.enabled = true;
+ segmentationObjects.add(segmentObject);
// Making a new segmentationObject after storing the current SegmentationObject
- segmentationMask = null;
+ segmentObject = null;
annotations.clear();
}
/**
- * Returns the current segmentation mask which has not yet been made into an object.
- *
- * @return A {@link SegmentationMask} instance. Returns the latest mask which hasn't yet turned into an object.
+ * @return A {@link SegmentationObject} instance. Returns the latest mask which hasn't yet turned into an object.
*/
public SegmentationMask getMask() {
- if (segmentationMask == null) {
- segmentationMask = new SegmentationMask(getBounds());
+ if (segmentObject == null) {
+ segmentObject = new SegmentationObject(getBounds());
}
- return segmentationMask;
+ return segmentObject;
}
/**
* All the masks excluding the current mask (i.e the mask which has not yet been made into a Segmentation object)
* @return
* A list of SegmentationMasks excluding the current mask which has not yet been made into a Segmentation object
*/
- public ArrayList<SegmentationMask> getMasks() {
+ public ArrayList<SegmentationMask> getSegmentObjects() {
- return segmentationMaskObjects;
+ return segmentationObjects;
}
/**
*/
public void enableClickedSegment(Point mouseClickedPoint) {
- for(SegmentationMask segmentMaskObject : segmentationMaskObjects)
+ for(SegmentationMask segmentMaskObject : segmentationObjects)
{
if(segmentMaskObject.getPixel(mouseClickedPoint.x, mouseClickedPoint.y) == 1)
{
// Disable all previous segments
disableAllSegments(false);
// Enable the currently clicked segment.
- segmentMaskObject.enabled = true;
+ segmentObject.enabled = true;
}
}
}
public void disableAllSegments(boolean value)
{
- for(SegmentationMask maskObject : segmentationMaskObjects)
- maskObject.enabled = value;
+ for(SegmentationMask segmentObject : segmentationObjects)
+ {
+ if(segmentObject instanceof ie.dcu.segment.SegmentationObject)
+ {
+ ((ie.dcu.segment.SegmentationObject)segmentObject).enabled = value;
+ }
+ }
}
/**
new FileInputStream(file)));
ImageData imageData = null;
- SegmentationMask segmentMaskObject = null;
+ SegmentationObject segmentObject = null;
AnnotationManager annotations = null;
try {
imageData = SwtUtils.loadImageData(in);
} else if (name.equals("mask.png")) {
- segmentMaskObject = SegmentationMask.read(in);
+ //segmentObject = (SegmentationObject) SegmentationMask.read(in);
} else if (name.equals("markup.dat")) {
annotations = new AnnotationManager();
throw new IOException("No image found in context file");
}
- if (segmentMaskObject == null) {
+ if (segmentObject == null) {
throw new IOException("No mask found in context file");
}
SegmentationContext ctx = new SegmentationContext(imageData, file);
- ctx.segmentationMask = segmentMaskObject;
+ ctx.segmentObject = segmentObject;
ctx.annotations = annotations;
return ctx;
*/
public final int width;
- /**
- * The total number of layers formed.
- */
- public static int numberOfLayers;
-
- /**
- * The layering number of the segmentation mask.
- */
- public int layerNumber;
-
- /**
- * Whether the segment needs to be enabled(highlighted) or not ?
- */
- public boolean enabled;
-
/**
* The height of the segmentation mask.
*/
super(height, width);
this.width = width;
this.height = height;
- this.layerNumber = ++numberOfLayers;
- this.enabled = false;
clear();
}
--- /dev/null
+package ie.dcu.segment;
+
+import org.eclipse.swt.graphics.Rectangle;
+
+
+/**
+ * Class that represents a independent segmentation mask.
+ *
+ * A segmentation mask is a two dimensional matrix of byte values. It is used
+ * to represents which pixels in an image that are part of the foreground, and
+ * which are part of the background.
+ *
+ * @author Nikhil
+ */
+
+public final class SegmentationObject extends SegmentationMask{
+
+ private static final long serialVersionUID = 8321845179859248904L;
+
+ //The total number of layers formed.
+ public static int numberOfLayers;
+
+ //The layering number of the segmentation mask.
+ public int layerNumber;
+
+ //Whether the segment needs to be enabled(highlighted) or not ?
+ public boolean enabled;
+
+ public SegmentationObject(int width, int height) {
+ super(width, height);
+ this.layerNumber = ++numberOfLayers;
+ this.enabled = false;
+ // TODO Auto-generated constructor stub
+ }
+
+ public SegmentationObject(Rectangle bounds) {
+ this(bounds.width, bounds.height);
+ // TODO Auto-generated constructor stub
+ }
+
+
+}
// Paint image
gc.drawImage(ctx.getImage(), 0, 0);
+ System.out.println("Number of mask objects"+ctx.getSegmentObjects().size());
// Paint all masks skipping the enabled mask.
- if(ctx.getMasks().size() > 0)
+ if(ctx.getSegmentObjects().size() > 0)
{
// For drawing all the disabled masks.
- for(SegmentationMask mask : ctx.getMasks())
+ for(SegmentationMask segmentObject : ctx.getSegmentObjects())
{
// Skipping the enabled segment from painting. We will paint the enabled segment at last.
- if(mask.enabled == true)
+ if(segmentObject instanceof ie.dcu.segment.SegmentationObject)
{
- continue;
+ System.out.println("Enabled status : "+((ie.dcu.segment.SegmentationObject)segmentObject).enabled);
+ if(((ie.dcu.segment.SegmentationObject)segmentObject).enabled == true)
+ {
+ continue;
+ }
}
else
{
- createVisibleMask(mask,false);
+ createVisibleMask(segmentObject,false);
gc.drawImage(maskImage, 0, 0);
}
}
gc.drawImage(maskImage, 0, 0);
}
// Painting the enabled mask.
- if(ctx.getMasks().size() > 0)
+ if(ctx.getSegmentObjects().size() > 0)
{
// For drawing all the previous masks.
- for(SegmentationMask mask : ctx.getMasks())
+ for(SegmentationMask segmentObject : ctx.getSegmentObjects())
{
// Blending of background pixel values while pasting the last mask only
- if(mask.enabled == true)
+ if(segmentObject instanceof ie.dcu.segment.SegmentationObject)
{
- createVisibleMask(mask,true);
- gc.drawImage(maskImage, 0, 0);
+ if(((ie.dcu.segment.SegmentationObject)segmentObject).enabled == true)
+ {
+ createVisibleMask(segmentObject,true);
+ gc.drawImage(maskImage, 0, 0);
+ }
}
}
}
* @param isFirstObject
* If set to <code>True</code> will blend the background and fore ground pixels.
*/
- private void createVisibleMask(SegmentationMask mask,boolean isFirstObject) {
+ private void createVisibleMask(SegmentationMask mask,boolean enabled) {
dispose();
switch (mask.values[i]) {
case SegmentationMask.BACKGROUND:
- alpha = isFirstObject ? (byte) 128 : (byte) 0;
+ alpha = enabled ? (byte) 128 : (byte) 0;
index = 2;
break;
case SegmentationMask.FOREGROUND:
i++;
}
}
-
// Create new mask
maskImage = new Image(Display.getCurrent(), maskData);
}