Hello!

To see the file structure, click on "tree".

Note that updates take place every 10 minutes, commits may not be seen immediately.
Colors for segments and single segment labelling. Done by Nikhil.
authorlingutln <lingutln@localhost>
Sat, 21 Jan 2012 02:41:15 +0000 (02:41 +0000)
committerlingutln <lingutln@localhost>
Sat, 21 Jan 2012 02:41:15 +0000 (02:41 +0000)
svn path=/; revision=267

13 files changed:
Annotation/.classpath
Annotation/src/ie/dcu/apps/ist/AppWindow.java
Annotation/src/ie/dcu/apps/ist/views/SegmentationView.java
Annotation/src/ie/dcu/apps/ist/widgets/AnnotatedImageControl.java
Annotation/src/ie/dcu/segment/SegmentationContext.java
Annotation/src/ie/dcu/segment/SegmentationMask.java
Annotation/src/ie/dcu/segment/painters/CombinedPainter.java
Annotation/src/ie/dcu/segment/painters/ForegroundOnlyPainter.java
Annotation/src/ie/dcu/segment/painters/MarkupPainter.java
Annotation/src/ie/dcu/segment/painters/MaskPainter.java
Annotation/src/ie/dcu/segment/painters/OriginalPainter.java
Annotation/src/ie/dcu/segment/painters/OutlineOverlayPainter.java
Annotation/src/ie/dcu/segment/painters/SegmentationPainter.java

index 22412b6c9a2c02f608af7c008e1447f0c9cabf62..958e3b9467779ada53dbda78096712752a805fed 100644 (file)
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-       <classpathentry kind="src" path="src"/>
-       <classpathentry excluding="src/" kind="src" path=""/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-       <classpathentry kind="lib" path="/home/lingutln/workspace/Annotation/library/commons-lang3-3.1.jar"/>
-       <classpathentry kind="lib" path="/home/lingutln/workspace/Annotation/library/jface.jar"/>
-       <classpathentry kind="lib" path="/home/lingutln/workspace/Annotation/library/json.jar"/>
-       <classpathentry kind="lib" path="/home/lingutln/workspace/Annotation/library/swt-gtk-64.jar"/>
-       <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry kind="src" path="src"/>\r
+       <classpathentry excluding="src/" kind="src" path=""/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+       <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/image_annotation/lib/swt-win.jar"/>\r
+       <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/NewAnnotation/library/commons-lang3-3.1.jar"/>\r
+       <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/NewAnnotation/library/jface.jar"/>\r
+       <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/NewAnnotation/library/json.jar"/>\r
+       <classpathentry kind="output" path="bin"/>\r
+</classpath>\r
index 5e012534438c268519be2735888c883e938e4999..01707f0340c929b6f69e8482b21ac16794d12d13 100644 (file)
@@ -703,15 +703,18 @@ public class AppWindow extends ApplicationWindow implements FileDropListener {
                        }
                        if (inside) {
                                status(AppStatus.Information, "Location [%4d,%4d] Color [%3d,%3d,%3d]",pt.x, pt.y, c.red, c.green, c.blue);
-                               if(view.getPainter().getMaskData().getPixel(pt.x,pt.y) == 0 && (view.getPainter().getName().equals("Foreground Only")))
-                       {                                                         
-                                       view.getCanvas().setToolTipText(SegmentationView.comboLabel.getText());
-                       return;
-                       }
-                       else if(view.getPainter().getMaskData().getPixel(pt.x,pt.y) == 1)
-                       {
-                                 view.getCanvas().setToolTipText(null);
-                       }
+                               if(view.getContext().isEnabled())
+                               {
+                                       if(view.getContext().getEnabledMask().getImageData().getPixel(pt.x,pt.y) != 0 && (view.getPainter().getName().equals("Combined")) && view.getLabelMode())
+                               {       
+                                               view.getCanvas().setToolTipText(SegmentationView.comboLabel.getText());
+                               return;
+                               }
+                               else
+                               {
+                                         view.getCanvas().setToolTipText(null);
+                               }
+                               }
                        }
                        inside = true;
                }
index 593685f836f7453f5376f7d7f291f8b9aa647e50..d91c1ebb93fc6201de59bb7949814ad93f3b6ef1 100644 (file)
@@ -68,7 +68,7 @@ public class SegmentationView extends Composite {
        private boolean auto = true;
 
        // Inorder to toggle between segmentation and Labelling mode. Initially under Segmentation Mode
-       public static boolean labelMode = false;
+       private static boolean labelMode = false;
        
        // Combo box housing the selectable views
        private Combo combo;
@@ -159,7 +159,7 @@ public class SegmentationView extends Composite {
 
        private void addListeners() {
                brushControl.addSelectionListener(eventHandler);
-               if(!labelMode)
+               if(!getLabelMode())
                {
                        view.addContextChangeListener(eventHandler);
                }
@@ -451,7 +451,7 @@ public class SegmentationView extends Composite {
        }
        
        public void setLabellingMode(boolean checked) {
-               if (!labelMode && checked) {
+               if (!getLabelMode() && checked) {
                        // Toggling between Segmentation and labelling
                        Tool.Foreground.action.setEnabled(false);
                        Tool.Background.action.setEnabled(false);
@@ -468,7 +468,7 @@ public class SegmentationView extends Composite {
                        view.addContextChangeListener(eventHandler);
                        view.getTool().attach(view.getImageControl());
                }
-               labelMode = checked;
+               setLabelMode(checked);
                updateToolStates();
        }
        
@@ -844,12 +844,12 @@ public class SegmentationView extends Composite {
                        assign.setEnabled(canZoomBestFit() & !(comboLabel.getText().isEmpty()));
                        Tool.Foreground.action.setChecked(isAnnotatingForeground());
                        Tool.Background.action.setChecked(isAnnotatingBackground());
-                       Tool.OperatingMode.action.setChecked(labelMode);
+                       Tool.OperatingMode.action.setChecked(getLabelMode());
                        Tool.Clear.action.setEnabled(canClear());
                        Tool.AutoApply.action.setChecked(auto);
                        Tool.SegmenterOptions.action.setEnabled(canShowOptions());
-                       Tool.Foreground.action.setEnabled(!labelMode && canZoomIn());
-                       Tool.Background.action.setEnabled(!labelMode && canZoomIn());
+                       Tool.Foreground.action.setEnabled(!getLabelMode() && canZoomIn());
+                       Tool.Background.action.setEnabled(!getLabelMode() && canZoomIn());
                        Tool.OperatingMode.action.setEnabled(canZoomIn());
                        Tool.FormSegment.action.setEnabled(CanLabel());
                                                
@@ -944,6 +944,15 @@ public class SegmentationView extends Composite {
        }
 
 
+       public static boolean getLabelMode() {
+               return labelMode;
+       }
+
+       public static void setLabelMode(boolean labelMode) {
+               SegmentationView.labelMode = labelMode;
+       }
+
+
        /**
         * Tool bar action. Delegates running to the execute method.
         */
index ffc85e112b6ffeadb79317c14e464b582602c625..7371d49ffa25394119ceb7cca13961441484775d 100644 (file)
@@ -381,7 +381,7 @@ public class AnnotatedImageControl extends Composite {
 
        private final DisposeListener disposeListener = new DisposeListener() {
                public void widgetDisposed(DisposeEvent e) {
-                       if (cursor != null && SegmentationView.labelMode) {
+                       if (cursor != null && SegmentationView.getLabelMode()) {
                                cursor.dispose();
                        }
                }
@@ -396,7 +396,7 @@ public class AnnotatedImageControl extends Composite {
 
                public void mouseMove(MouseEvent e) {
                        Canvas canvas = view.getCanvas();
-                       if (view.imageContains(new Point(e.x, e.y)) && !SegmentationView.labelMode) {
+                       if (view.imageContains(new Point(e.x, e.y)) && !SegmentationView.getLabelMode()) {
                                if (cursor == null) {
                                        cursor = CursorFactory.createCrosshairCursor();
                                }
index a04031fde82f471b242dff13ffcf3a9ca0372a15..a92c8288ea6021e9b60e5c86c05017253f1f0cd9 100644 (file)
@@ -143,11 +143,10 @@ public class SegmentationContext {
        
        public final void formSegmentationObject() {
                // Makes needsHighlighting <code>False</code> for all the previous segments.
-               disableAllSegments(false);
+               disableAllSegments();
                // Set needsHighlighting <code>True</code> for the current segment.
                currentSegmentMask.enabled = true;
                segmentationMaskObjects.add(currentSegmentMask);
-               
                // Making a new segmentationObject after storing the current SegmentationObject
                currentSegmentMask = null;
                annotations.clear();
@@ -184,18 +183,18 @@ public class SegmentationContext {
                        if(segmentMaskObject.getPixel(mouseClickedPoint.x, mouseClickedPoint.y) == 1)
                        {
                                // Disable all previous segments
-                               disableAllSegments(false);
+                               disableAllSegments();
                                // Enable the currently clicked segment.
                                segmentMaskObject.enabled = true;
                        }
                }
        }
                
-       public void disableAllSegments(boolean value)
+       public void disableAllSegments()
        {
                for(SegmentationMask currentSegmentMask : segmentationMaskObjects)
                {
-                       currentSegmentMask.enabled = value;
+                       currentSegmentMask.enabled = false;
                }       
        }
        
@@ -205,7 +204,7 @@ public class SegmentationContext {
        public boolean isEnabled() {
                for(SegmentationMask SegmentMask : segmentationMaskObjects)
                {
-                       if(SegmentMask.enabled = true)
+                       if(SegmentMask.enabled)
                        {
                                return true;
                        }
@@ -219,7 +218,7 @@ public class SegmentationContext {
        public SegmentationMask getEnabledMask() {
                for(SegmentationMask SegmentMask : segmentationMaskObjects)
                {
-                       if(SegmentMask.enabled = true)
+                       if(SegmentMask.enabled == true)
                        {
                                return SegmentMask;
                        }
index 75591dee3090d7e4178af3ddfbd309c2cba71117..a8e9f8ee8d4636a846cb2a71657b8a5085219ba5 100644 (file)
@@ -42,7 +42,6 @@ public class SegmentationMask extends ByteMatrix{
         */
        public static final byte BACKGROUND = 2;
 
-       
        /**
         * The width of the segmentation mask.
         */
@@ -62,6 +61,12 @@ public class SegmentationMask extends ByteMatrix{
        //The name(label) associated with each segment.
        public String segmentName;
        
+       //The maskImage each segment.
+       public Image maskImage;
+       
+       //The maskImageData each segment.
+       public ImageData maskImageData;
+       
        //Whether the segment needs to be enabled(highlighted) or not ?
        public boolean enabled;
        
@@ -80,6 +85,7 @@ public class SegmentationMask extends ByteMatrix{
                this.height = height;
                this.layerNumber = ++numberOfLayers;
                this.segmentName = "";
+               this.enabled = false;
                clear();
        }
        
@@ -322,7 +328,14 @@ public class SegmentationMask extends ByteMatrix{
        public void load(File file) throws IOException {
                load(loadImageData(file));
        }
-
+       
+       public Image getImage() {
+               return this.maskImage;
+       }
+       
+       public ImageData getImageData() {
+               return this.maskImageData;
+       }
 
        /**
         * Load the mask from a PNG image.
index 9281baae44156d281cd2b9831b9da52f773bb529..19927908de9f57f0a6b94b10d870a47324bbc5e6 100644 (file)
@@ -14,9 +14,7 @@ import org.eclipse.swt.widgets.*;
 public class CombinedPainter implements SegmentationPainter {
        public static final String NAME = "Combined";
        
-       private ImageData maskData;
        private ImageData maskBorderData;
-       private Image maskImage;
        private Image maskBorderImage;
 
        
@@ -29,8 +27,15 @@ public class CombinedPainter implements SegmentationPainter {
                return "An overlaid view of the image, segmentation mask, and markup";
        }
 
-       public ImageData getMaskData() {
-               return maskData;
+       public ImageData getMaskData(SegmentationContext ctx) {
+               /*for(SegmentationMask segmentMask : ctx.getSegmentationMasks())
+               {
+                       if(segmentMask.enabled == true)
+                       {
+                               return segmentMask.getImageData();
+                       }
+               }*/
+               return maskBorderData;
        }
        
        public void paint(SegmentationContext ctx, ObservableImage im) {
@@ -46,19 +51,16 @@ public class CombinedPainter implements SegmentationPainter {
                        // For drawing all the disabled masks.
                        for(SegmentationMask segmentMask : ctx.getSegmentationMasks())
                        {
-                               if(segmentMask.enabled == true)
-                               {
-                                       continue;
-                               }
-                               else
+                               
+                               if(segmentMask.enabled != true)
+                               
                                {
                                        createVisibleMask(segmentMask,false);
-                                       gc.drawImage(maskImage, 0, 0);
+                                       gc.drawImage(segmentMask.getImage(), 0, 0);
                                        createVisibleMaskBorder(segmentMask);
                                        gc.drawImage(maskBorderImage, 0, 0);
                                }
                        }
-                       
                        // For drawing the enabled mask and its border..
                        for(SegmentationMask segmentMask : ctx.getSegmentationMasks())
                        {
@@ -66,14 +68,14 @@ public class CombinedPainter implements SegmentationPainter {
                                if(segmentMask.enabled == true)
                                {
                                        createVisibleMask(segmentMask,true);
-                                       gc.drawImage(maskImage, 0, 0);
+                                       gc.drawImage(segmentMask.getImage(), 0, 0);
                                        createVisibleMaskBorder(segmentMask);
                                        gc.drawImage(maskBorderImage, 0, 0);
                                }
                        }
                        // Current mask which has not yet been made into an object
                        createVisibleMask(ctx.getMask(),false);
-                       gc.drawImage(maskImage, 0, 0);
+                       gc.drawImage(ctx.getMask().getImage(), 0, 0);
                        createVisibleMaskBorder(ctx.getMask());
                        gc.drawImage(maskBorderImage, 0, 0);
                        
@@ -82,7 +84,7 @@ public class CombinedPainter implements SegmentationPainter {
                else
                {
                        createVisibleMask(ctx.getMask(),true);
-                       gc.drawImage(maskImage, 0, 0);
+                       gc.drawImage(ctx.getMask().getImage(), 0, 0);
                        createVisibleMaskBorder(ctx.getMask());
                        gc.drawImage(maskBorderImage, 0, 0);
                }
@@ -104,13 +106,13 @@ public class CombinedPainter implements SegmentationPainter {
                
                dispose();
                
-               if (isNewMaskDataRequired(mask.getBounds())) {
-                       maskData = createMaskData(mask.getBounds());
+               if (isNewMaskDataRequired(mask)) {
+                       mask.maskImageData = createMaskData(mask.getBounds());
                } 
                
                // Blit in pixels
                for (int y = 0, i = 0; y < mask.height; y++) {
-                       int rowOffset = y * maskData.bytesPerLine;
+                       int rowOffset = y * mask.maskImageData.bytesPerLine;
                        for (int x = 0; x < mask.width; x++) {
                                byte alpha, index;
                                
@@ -121,7 +123,7 @@ public class CombinedPainter implements SegmentationPainter {
                                        break;
                                case SegmentationMask.FOREGROUND:
                                        alpha = (byte) 128;
-                                       index = (byte) ((i%3)+1);
+                                       index = (byte) (mask.layerNumber%3+1);
                                        break;
                                default:
                                        alpha = 0;
@@ -133,17 +135,17 @@ public class CombinedPainter implements SegmentationPainter {
                                // contiguously in memory (i.e. there are > width bytes per scan-line in
                                // the buffer), so we can't directly copy in at the same index as the
                                // mask.
-                               maskData.data[x + rowOffset] = index;
+                               mask.maskImageData.data[x + rowOffset] = index;
                                
                                // However, the alpha data is always aligned correctly
-                               maskData.alphaData[i] = alpha;
+                               mask.maskImageData.alphaData[i] = alpha;
                                
                                // Next location in the mask
                                i++;
                        }
                }
        // Create new mask
-       maskImage = new Image(Display.getCurrent(), maskData);
+       mask.maskImage = new Image(Display.getCurrent(), mask.maskImageData);
        }
        
        private void createVisibleMaskBorder(SegmentationMask mask) {
@@ -207,11 +209,11 @@ public class CombinedPainter implements SegmentationPainter {
                maskBorderImage = new Image(Display.getCurrent(), maskBorderData);
        }
        
-       private boolean isNewMaskDataRequired(Rectangle bounds) {
-               if (maskData == null) {
+       private boolean isNewMaskDataRequired(SegmentationMask mask) {
+               if (mask.getImageData() == null) {
                        return true;
                } else {
-                       return maskData.width != bounds.width || maskData.height != bounds.height;
+                       return mask.getImageData().width != mask.getBounds().width || mask.getImageData().height != mask.getBounds().height;
                }
        }
        
@@ -247,7 +249,7 @@ public class CombinedPainter implements SegmentationPainter {
        private static ImageData createMaskBorderData(Rectangle bounds) {
                RGB[] colors = new RGB[] {
                        new RGB(255,255,255),
-                       new RGB(0,255,0)
+                       new RGB(255,140,0)
                };
                
                // Create binary indexed palette
@@ -265,7 +267,7 @@ public class CombinedPainter implements SegmentationPainter {
        }
        
        public void dispose() {
-               // Dispose mask
+               /*// Dispose mask
                if (maskImage != null) {
                        if (!maskImage.isDisposed()) {
                                maskImage.dispose();
@@ -277,6 +279,6 @@ public class CombinedPainter implements SegmentationPainter {
                                maskBorderImage.dispose();
                        }
                        maskBorderImage = null;
-               }
+               }*/
        }
 }
index bc2bcb0c09572243276e22ea8cf9046d165e14a1..5e0fae84e1c6d809bfe500b267877478ac808a36 100644 (file)
@@ -26,7 +26,7 @@ public class ForegroundOnlyPainter implements SegmentationPainter {
                return "Shows the foreground region of the image.";
        }
        
-       public ImageData getMaskData() {
+       public ImageData getMaskData(SegmentationContext ctx) {
                return maskData;
        }
 
index 7f9dc61d8f93693c6ecf8904435ed7fc5ad6edd4..a07e240880dbf514ad9b18e54123f530a2e4fc30 100644 (file)
@@ -26,7 +26,7 @@ public class MarkupPainter implements SegmentationPainter {
                return NAME;
        }
        
-       public ImageData getMaskData() {
+       public ImageData getMaskData(SegmentationContext ctx) {
                return null;
        }
 
index f7d3b893e315a598c18402442ccd4b78642bfdb9..a634c7ca402c2c4060b53851d67e4b56b1586c16 100644 (file)
@@ -26,7 +26,7 @@ public class MaskPainter implements SegmentationPainter {
                return NAME;
        }
        
-       public ImageData getMaskData() {
+       public ImageData getMaskData(SegmentationContext ctx) {
                return maskData;
        }
 
index c39c0d1abd6a22b0af8ce5cec13cf150036ac229..faacb64061998fcc04c7422482ead2a88548bd94 100644 (file)
@@ -23,7 +23,7 @@ public class OriginalPainter implements SegmentationPainter {
                return NAME;
        }
        
-       public ImageData getMaskData() {
+       public ImageData getMaskData(SegmentationContext ctx) {
                return null;
        }
 
index 7f7b838010f33dff6daa792a6d91d3b948f5aa31..a13e3d335a1039656358ae74ae5b1bcda8263ca2 100644 (file)
@@ -25,7 +25,7 @@ public class OutlineOverlayPainter implements SegmentationPainter {
                return "Shows an an overlay of foreground border on the image";
        }
 
-       public ImageData getMaskData() {
+       public ImageData getMaskData(SegmentationContext ctx) {
                return maskData;
        }
        
index f69d6e9b74cad531005878f72042df461a563ab4..cb4e103f04e8392d601fc1c247abb78a8ea53824 100644 (file)
@@ -21,7 +21,7 @@ public interface SegmentationPainter {
        /**
         * Returns a description of the painter.
         */
-       public ImageData getMaskData();
+       public ImageData getMaskData(SegmentationContext ctx);
 
        /**
         * Returns a masked imageData.