-<?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/jface.jar"/>\r
- <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/image_annotation/lib/swt-win.jar"/>\r
- <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/Annotation/library/commons-lang3-3.1.jar"/>\r
- <classpathentry kind="lib" path="C:/Users/Nikhil/workspace/Annotation/library/json.jar"/>\r
- <classpathentry kind="output" path="bin"/>\r
-</classpath>\r
+<?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>
public void formSegmetationObject() {
view.getContext().formSegmentationObject();
+ updateToolStates();
}
Tool.ZoomOut.action.setEnabled(canZoomOut());
Tool.ZoomOriginal.action.setEnabled(canZoomOriginal());
Tool.ZoomBestFit.action.setEnabled(canZoomBestFit());
- comboLabel.setEnabled(CanLabel());
+ if(view.getContext() != null)
+ {
+ comboLabel.setEnabled((view.getContext().getMasks().size() > 0));
+ }
+ else
+ {
+ comboLabel.setEnabled(false);
+ }
assign.setEnabled(canZoomBestFit() & !(comboLabel.getText().isEmpty()));
Tool.Foreground.action.setChecked(isAnnotatingForeground());
Tool.Background.action.setChecked(isAnnotatingBackground());
private final MouseListener popupListener = new MouseListener() {
public void mouseUp(MouseEvent event) {
- PopUpLabelDialog dialog = new PopUpLabelDialog(getShell());
- PopUpLabelDialog.Result result = dialog.open();
- if (result != null) {
- String lab = null;
- if(result.comboText.indexOf('{') != -1)
- {
- lab = result.comboText.substring(0,result.comboText.indexOf('{')-1);
- }
- else
- {
- lab = result.comboText;
- }
- System.out.println("selected"+lab);
- comboLabel.setText(result.comboText);
- execute(Tool.AssignButton, null);
+ // For the right click
+ if(event.button == 3)
+ {
+ PopUpLabelDialog dialog = new PopUpLabelDialog(getShell());
+ PopUpLabelDialog.Result result = dialog.open();
+ if (result != null)
+ {
+ String lab = null;
+ if(result.comboText.indexOf('{') != -1)
+ {
+ lab = result.comboText.substring(0,result.comboText.indexOf('{')-1);
+ }
+ else
+ {
+ lab = result.comboText;
+ }
+ System.out.println("selected"+lab);
+ comboLabel.setText(result.comboText);
+ execute(Tool.AssignButton, null);
+ }
+ }
+ else if(event.button == 1)
+ {
+ System.out.println("Mouse left click");
}
}
public void mouseDown(MouseEvent e)
}
public boolean CanLabel() {
- if (ctx != null) {
+ if (ctx != null)
+ {
return ctx.getAnnotations().canLabel();
}
return false;
/**
* For storing independent Segmentation objects
*/
- private ArrayList<SegmentationObject> segmentationObjects;
+ private ArrayList<SegmentationMask> segmentationMaskObjects;
// lazy create (use getters for these fields)
private AnnotationManager annotations;
- private SegmentationObject segmentObject;
+ private SegmentationMask segmentationMask;
private Image image;
private Rectangle bounds;
private SegmentationContext(ImageData imageData, File file) {
this.imageData = imageData;
this.file = file;
- segmentationObjects = new ArrayList<SegmentationObject>();
+ segmentationMaskObjects = new ArrayList<SegmentationMask>();
}
/**
}
return annotations;
}
-
+
/**
* Returns the bounds of the current image and segmentation mask.
*
}
public final void formSegmentationObject() {
- segmentationObjects.add(segmentObject);
- System.out.println("Number of objects formed : "+segmentationObjects.size());
- /*if(segmentationObjects.size()>1)
- {
- //assert (segmentationObjects.get(0).equals(segmentationObjects.get(1))) : true;
- if(segmentationObjects.get(0).equals(segmentationObjects.get(1)))
- {
- System.out.println("Both objects are equal");
- }
- else
- {
- System.out.println("Both objects are not equal");
- }
- }*/
+ segmentationMaskObjects.add(segmentationMask);
+
// Making a new segmentationObject after storing the current SegmentationObject
- segmentObject = null;
- // System.out.println("Annotation size : "+annotations.count());
+ segmentationMask = null;
annotations.clear();
}
/**
- * Returns the current segmentation mask.
+ * 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.
*/
public SegmentationMask getMask() {
- if (segmentObject == null) {
- segmentObject = new SegmentationObject(getBounds());
+ if (segmentationMask == null) {
+ segmentationMask = new SegmentationMask(getBounds());
}
- return segmentObject;
+ return segmentationMask;
}
-
- public ArrayList<SegmentationObject> getMasks() {
+ /**
+ * 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() {
- return segmentationObjects;
+ return segmentationMaskObjects;
}
/**
new FileInputStream(file)));
ImageData imageData = null;
- SegmentationObject segmentObject = null;
+ SegmentationMask segmentMaskObject = null;
AnnotationManager annotations = null;
try {
imageData = SwtUtils.loadImageData(in);
} else if (name.equals("mask.png")) {
- segmentObject = (SegmentationObject) SegmentationMask.read(in);
+ segmentMaskObject = SegmentationMask.read(in);
} else if (name.equals("markup.dat")) {
annotations = new AnnotationManager();
throw new IOException("No image found in context file");
}
- if (segmentObject == null) {
+ if (segmentMaskObject == null) {
throw new IOException("No mask found in context file");
}
SegmentationContext ctx = new SegmentationContext(imageData, file);
- ctx.segmentObject = segmentObject;
+ ctx.segmentationMask = segmentMaskObject;
ctx.annotations = annotations;
return ctx;
ImageData data = loadImageData(file);
// Create compatible mask
- SegmentationMask mask = new SegmentationObject(data.width, data.height);
+ SegmentationMask mask = new SegmentationMask(data.width, data.height);
// Load data into the mask
mask.load(data);
ImageData data = loadImageData(in);
// Create compatible mask
- SegmentationMask mask = new SegmentationObject(data.width, data.height);
+ SegmentationMask mask = new SegmentationMask(data.width, data.height);
// Load data into the mask
mask.load(data);
+++ /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;
- private int layerNumber;
-
- public SegmentationObject(int width, int height) {
- super(width, height);
- // TODO Auto-generated constructor stub
- }
-
- public SegmentationObject(Rectangle bounds) {
- this(bounds.width, bounds.height);
- // TODO Auto-generated constructor stub
- }
-
-
-}
}
public void paint(SegmentationContext ctx, ObservableImage im) {
-
+
GC gc = im.beginPaint();
// Paint image
gc.drawImage(ctx.getImage(), 0, 0);
- // Paint mask
- if(ctx.getMasks().size() != 0)
+ // Paint masks
+ if(ctx.getMasks().size() > 0)
{
// For drawing all the previous masks.
for(SegmentationMask mask : ctx.getMasks())
{
- createVisibleMask(mask);
- gc.drawImage(maskImage, 0, 0);
+ // Blending of background pixel values while pasting the last mask only
+ if(ctx.getMasks().indexOf(mask) == ctx.getMasks().size()-1)
+ {
+ createVisibleMask(mask,true);
+ gc.drawImage(maskImage, 0, 0);
+ }
+ else
+ {
+ createVisibleMask(mask,false);
+ gc.drawImage(maskImage, 0, 0);
+ }
}
+ // Current mask which has not yet been made into an object
+ createVisibleMask(ctx.getMask(),false);
+ gc.drawImage(maskImage, 0, 0);
}
- // Drawing the current mask
- createVisibleMask(ctx.getMask());
- gc.drawImage(maskImage, 0, 0);
-
+ else
+ {
+ createVisibleMask(ctx.getMask(),true);
+ gc.drawImage(maskImage, 0, 0);
+ }
+
// Paint all annotations
ctx.getAnnotations().paint(im);
- private void createVisibleMask(SegmentationMask mask) {
+ private void createVisibleMask(SegmentationMask mask,boolean isFirstObject) {
dispose();
if (isNewMaskDataRequired(mask.getBounds())) {
maskData = createMaskData(mask.getBounds());
switch (mask.values[i]) {
case SegmentationMask.BACKGROUND:
- alpha = (byte) 128;
+ alpha = isFirstObject ? (byte) 128 : (byte) 0;
index = 2;
break;
case SegmentationMask.FOREGROUND:
}
-
-
- // Temp code, will remove
-
- /*private void createVisibleMask(ArrayList<SegmentationMask> masks) {
- dispose();
- System.out.println("In loop"+masks.size());
- for (SegmentationMask mask : masks) {
- if (isNewMaskDataRequired(mask.getBounds())) {
- maskData = createMaskData(mask.getBounds());
- }
-
- // Blit in pixels
- for (int y = 0, i = 0; y < mask.height; y++) {
- int rowOffset = y * maskData.bytesPerLine;
- for (int x = 0; x < mask.width; x++) {
- byte alpha, index;
-
- switch (mask.values[i]) {
- case SegmentationMask.BACKGROUND:
- alpha = (byte) 128;
- index = 2;
- break;
- case SegmentationMask.FOREGROUND:
- alpha = (byte) 128;
- index = 1;
- break;
- default:
- alpha = 0;
- index = 0;
- break;
- }
-
- // The SWT ImageData buffer doesn't usually have it's rows aligned
- // 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;
-
- // However, the alpha data is always aligned correctly
- maskData.alphaData[i] = alpha;
-
- // Next location in the mask
- i++;
- }
- }
- }
-
- // Create new mask
- maskImage = new Image(Display.getCurrent(), maskData);
- }*/
-
-
-
-
-
private boolean isNewMaskDataRequired(Rectangle bounds) {
if (maskData == null) {
return true;