-<?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
}
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;
}
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;
private void addListeners() {
brushControl.addSelectionListener(eventHandler);
- if(!labelMode)
+ if(!getLabelMode())
{
view.addContextChangeListener(eventHandler);
}
}
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);
view.addContextChangeListener(eventHandler);
view.getTool().attach(view.getImageControl());
}
- labelMode = checked;
+ setLabelMode(checked);
updateToolStates();
}
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());
}
+ public static boolean getLabelMode() {
+ return labelMode;
+ }
+
+ public static void setLabelMode(boolean labelMode) {
+ SegmentationView.labelMode = labelMode;
+ }
+
+
/**
* Tool bar action. Delegates running to the execute method.
*/
private final DisposeListener disposeListener = new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
- if (cursor != null && SegmentationView.labelMode) {
+ if (cursor != null && SegmentationView.getLabelMode()) {
cursor.dispose();
}
}
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();
}
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();
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;
}
}
public boolean isEnabled() {
for(SegmentationMask SegmentMask : segmentationMaskObjects)
{
- if(SegmentMask.enabled = true)
+ if(SegmentMask.enabled)
{
return true;
}
public SegmentationMask getEnabledMask() {
for(SegmentationMask SegmentMask : segmentationMaskObjects)
{
- if(SegmentMask.enabled = true)
+ if(SegmentMask.enabled == true)
{
return SegmentMask;
}
*/
public static final byte BACKGROUND = 2;
-
/**
* The width of the segmentation mask.
*/
//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;
this.height = height;
this.layerNumber = ++numberOfLayers;
this.segmentName = "";
+ this.enabled = false;
clear();
}
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.
public class CombinedPainter implements SegmentationPainter {
public static final String NAME = "Combined";
- private ImageData maskData;
private ImageData maskBorderData;
- private Image maskImage;
private Image maskBorderImage;
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) {
// 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())
{
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);
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);
}
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;
break;
case SegmentationMask.FOREGROUND:
alpha = (byte) 128;
- index = (byte) ((i%3)+1);
+ index = (byte) (mask.layerNumber%3+1);
break;
default:
alpha = 0;
// 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) {
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;
}
}
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
}
public void dispose() {
- // Dispose mask
+ /*// Dispose mask
if (maskImage != null) {
if (!maskImage.isDisposed()) {
maskImage.dispose();
maskBorderImage.dispose();
}
maskBorderImage = null;
- }
+ }*/
}
}
return "Shows the foreground region of the image.";
}
- public ImageData getMaskData() {
+ public ImageData getMaskData(SegmentationContext ctx) {
return maskData;
}
return NAME;
}
- public ImageData getMaskData() {
+ public ImageData getMaskData(SegmentationContext ctx) {
return null;
}
return NAME;
}
- public ImageData getMaskData() {
+ public ImageData getMaskData(SegmentationContext ctx) {
return maskData;
}
return NAME;
}
- public ImageData getMaskData() {
+ public ImageData getMaskData(SegmentationContext ctx) {
return null;
}
return "Shows an an overlay of foreground border on the image";
}
- public ImageData getMaskData() {
+ public ImageData getMaskData(SegmentationContext ctx) {
return maskData;
}
/**
* Returns a description of the painter.
*/
- public ImageData getMaskData();
+ public ImageData getMaskData(SegmentationContext ctx);
/**
* Returns a masked imageData.