From 0ae4d7cab8c305b6bca37233e5d4a7f4575e0904 Mon Sep 17 00:00:00 2001 From: lingutln Date: Thu, 12 Jan 2012 23:40:35 +0000 Subject: [PATCH] Separated out the SegmentationObject from SegmentationMask. Done by Nikhil. svn path=/; revision=262 --- .../dcu/apps/ist/views/SegmentationView.java | 2 +- .../ist/widgets/AnnotatedImageControl.java | 2 +- .../ie/dcu/segment/SegmentationContext.java | 47 ++++++++++--------- .../src/ie/dcu/segment/SegmentationMask.java | 17 ------- .../ie/dcu/segment/SegmentationObject.java | 42 +++++++++++++++++ .../dcu/segment/painters/CombinedPainter.java | 33 ++++++++----- 6 files changed, 89 insertions(+), 54 deletions(-) create mode 100644 Annotation/src/ie/dcu/segment/SegmentationObject.java diff --git a/Annotation/src/ie/dcu/apps/ist/views/SegmentationView.java b/Annotation/src/ie/dcu/apps/ist/views/SegmentationView.java index af34230..dc688be 100644 --- a/Annotation/src/ie/dcu/apps/ist/views/SegmentationView.java +++ b/Annotation/src/ie/dcu/apps/ist/views/SegmentationView.java @@ -833,7 +833,7 @@ public class SegmentationView extends Composite { Tool.ZoomBestFit.action.setEnabled(canZoomBestFit()); if(view.getContext() != null) { - comboLabel.setEnabled((view.getContext().getMasks().size() > 0)); + comboLabel.setEnabled((view.getContext().getSegmentObjects().size() > 0)); } else { diff --git a/Annotation/src/ie/dcu/apps/ist/widgets/AnnotatedImageControl.java b/Annotation/src/ie/dcu/apps/ist/widgets/AnnotatedImageControl.java index 3a8df39..ffc85e1 100644 --- a/Annotation/src/ie/dcu/apps/ist/widgets/AnnotatedImageControl.java +++ b/Annotation/src/ie/dcu/apps/ist/widgets/AnnotatedImageControl.java @@ -436,7 +436,7 @@ public class AnnotatedImageControl extends Composite { { if(view.imageContains(mouseClickedPoint)) { - ctx.enableClickedSegment(view.canvasToImage(mouseClickedPoint)); + enableClickedSegment(view.canvasToImage(mouseClickedPoint)); } repaint(); } diff --git a/Annotation/src/ie/dcu/segment/SegmentationContext.java b/Annotation/src/ie/dcu/segment/SegmentationContext.java index d5a5b0e..51831f2 100644 --- a/Annotation/src/ie/dcu/segment/SegmentationContext.java +++ b/Annotation/src/ie/dcu/segment/SegmentationContext.java @@ -50,11 +50,11 @@ public class SegmentationContext { /** * For storing independent Segmentation objects */ - private ArrayList segmentationMaskObjects; + private ArrayList segmentationObjects; // lazy create (use getters for these fields) private AnnotationManager annotations; - private SegmentationMask segmentationMask; + private SegmentationObject segmentObject; private Image image; private Rectangle bounds; @@ -70,7 +70,7 @@ public class SegmentationContext { private SegmentationContext(ImageData imageData, File file) { this.imageData = imageData; this.file = file; - segmentationMaskObjects = new ArrayList(); + segmentationObjects = new ArrayList(); } /** @@ -144,33 +144,31 @@ public class SegmentationContext { // Makes needsHighlighting False for all the previous segments. disableAllSegments(false); // Set needsHighlighting True 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 getMasks() { + public ArrayList getSegmentObjects() { - return segmentationMaskObjects; + return segmentationObjects; } /** @@ -180,22 +178,27 @@ public class SegmentationContext { */ 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; + } + } } /** @@ -347,7 +350,7 @@ public class SegmentationContext { new FileInputStream(file))); ImageData imageData = null; - SegmentationMask segmentMaskObject = null; + SegmentationObject segmentObject = null; AnnotationManager annotations = null; try { @@ -360,7 +363,7 @@ public class SegmentationContext { 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(); @@ -378,7 +381,7 @@ public class SegmentationContext { throw new IOException("No image found in context file"); } - if (segmentMaskObject == null) { + if (segmentObject == null) { throw new IOException("No mask found in context file"); } @@ -388,7 +391,7 @@ public class SegmentationContext { SegmentationContext ctx = new SegmentationContext(imageData, file); - ctx.segmentationMask = segmentMaskObject; + ctx.segmentObject = segmentObject; ctx.annotations = annotations; return ctx; diff --git a/Annotation/src/ie/dcu/segment/SegmentationMask.java b/Annotation/src/ie/dcu/segment/SegmentationMask.java index 7252996..56bfacb 100644 --- a/Annotation/src/ie/dcu/segment/SegmentationMask.java +++ b/Annotation/src/ie/dcu/segment/SegmentationMask.java @@ -48,21 +48,6 @@ public class SegmentationMask extends ByteMatrix{ */ 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. */ @@ -81,8 +66,6 @@ public class SegmentationMask extends ByteMatrix{ super(height, width); this.width = width; this.height = height; - this.layerNumber = ++numberOfLayers; - this.enabled = false; clear(); } diff --git a/Annotation/src/ie/dcu/segment/SegmentationObject.java b/Annotation/src/ie/dcu/segment/SegmentationObject.java new file mode 100644 index 0000000..a835d84 --- /dev/null +++ b/Annotation/src/ie/dcu/segment/SegmentationObject.java @@ -0,0 +1,42 @@ +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 + } + + +} diff --git a/Annotation/src/ie/dcu/segment/painters/CombinedPainter.java b/Annotation/src/ie/dcu/segment/painters/CombinedPainter.java index f64b743..d920429 100644 --- a/Annotation/src/ie/dcu/segment/painters/CombinedPainter.java +++ b/Annotation/src/ie/dcu/segment/painters/CombinedPainter.java @@ -38,20 +38,25 @@ public class CombinedPainter implements SegmentationPainter { // 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); } } @@ -60,16 +65,19 @@ public class CombinedPainter implements SegmentationPainter { 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); + } } } } @@ -94,7 +102,7 @@ public class CombinedPainter implements SegmentationPainter { * @param isFirstObject * If set to True will blend the background and fore ground pixels. */ - private void createVisibleMask(SegmentationMask mask,boolean isFirstObject) { + private void createVisibleMask(SegmentationMask mask,boolean enabled) { dispose(); @@ -110,7 +118,7 @@ public class CombinedPainter implements SegmentationPainter { 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: @@ -136,7 +144,6 @@ public class CombinedPainter implements SegmentationPainter { i++; } } - // Create new mask maskImage = new Image(Display.getCurrent(), maskData); } -- 2.34.1