001 /*----------------------------------------------------------------------------*/ 002 /* Copyright (c) FIRST 2008-2012. All Rights Reserved. */ 003 /* Open Source Software - may be modified and shared by FRC teams. The code */ 004 /* must be accompanied by the FIRST BSD license file in the root directory of */ 005 /* the project. */ 006 /*----------------------------------------------------------------------------*/ 007 package edu.wpi.first.wpilibj.image; 008 009 /** 010 * Class to store commonly used information about a particle. 011 * @author dtjones 012 */ 013 public class ParticleAnalysisReport { 014 015 /** 016 * The height of the image in pixels. 017 */ 018 public final int imageHeight; 019 /** 020 * The width of the image in pixels. 021 */ 022 public final int imageWidth; 023 /** X-coordinate of the point representing the average position of the 024 * total particle mass, assuming every point in the particle has a constant density */ 025 public final int center_mass_x; // MeasurementType: IMAQ_MT_CENTER_OF_MASS_X 026 /** Y-coordinate of the point representing the average position of the 027 * total particle mass, assuming every point in the particle has a constant density */ 028 public final int center_mass_y; // MeasurementType: IMAQ_MT_CENTER_OF_MASS_Y 029 /** 030 * Center of mass x value normalized to -1.0 to +1.0 range. 031 */ 032 public final double center_mass_x_normalized; 033 /** 034 * Center of mass y value normalized to -1.0 to +1.0 range. 035 */ 036 public final double center_mass_y_normalized; 037 /** Area of the particle */ 038 public final double particleArea; // MeasurementType: IMAQ_MT_AREA 039 /** Bounding Rectangle */ 040 public final int boundingRectLeft; // left/top/width/height 041 /** Bounding Rectangle */ 042 public final int boundingRectTop; 043 /** Bounding Rectangle */ 044 public final int boundingRectWidth; 045 /** Bounding Rectangle */ 046 public final int boundingRectHeight; 047 /** Percentage of the particle Area covering the Image Area. */ 048 public final double particleToImagePercent; // MeasurementType: IMAQ_MT_AREA_BY_IMAGE_AREA 049 /** Percentage of the particle Area in relation to its Particle and Holes Area */ 050 public final double particleQuality; // MeasurementType: IMAQ_MT_AREA_BY_PARTICLE_AND_HOLES_AREA 051 052 ParticleAnalysisReport(BinaryImage image, int index) throws NIVisionException { 053 imageHeight = image.getHeight(); 054 imageWidth = image.getWidth(); 055 center_mass_x = (int) NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_CENTER_OF_MASS_X); 056 center_mass_y = (int) NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_CENTER_OF_MASS_Y); 057 center_mass_x_normalized = (2.0 * center_mass_x / imageWidth) - 1.0; 058 center_mass_y_normalized = (2.0 * center_mass_y / imageHeight) - 1.0; 059 particleArea = NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_AREA); 060 boundingRectLeft = (int) NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_BOUNDING_RECT_LEFT); 061 boundingRectTop = (int) NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_BOUNDING_RECT_TOP); 062 boundingRectWidth = (int) NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_BOUNDING_RECT_WIDTH); 063 boundingRectHeight = (int) NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_BOUNDING_RECT_HEIGHT); 064 particleToImagePercent = NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_AREA_BY_IMAGE_AREA); 065 particleQuality = NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_AREA_BY_PARTICLE_AND_HOLES_AREA); 066 } 067 068 static double getParticleToImagePercent(BinaryImage image, int index) throws NIVisionException { 069 return NIVision.MeasureParticle(image.image, index, false, NIVision.MeasurementType.IMAQ_MT_AREA_BY_IMAGE_AREA); 070 } 071 072 /** 073 * Get string representation of the particle analysis report. 074 * @return A string representation of the particle analysis report. 075 */ 076 public String toString() { 077 return "Particle Report: \n" + 078 " Image Height : " + imageHeight + "\n" + 079 " Image Width : " + imageWidth + "\n" + 080 " Center of mass : ( " + center_mass_x + " , " + center_mass_y + " )\n" + 081 " normalized : ( " + center_mass_x_normalized + " , " + center_mass_y_normalized + " )\n" + 082 " Area : " + particleArea + "\n" + 083 " percent : " + particleToImagePercent + "\n" + 084 " Bounding Rect : ( " + boundingRectLeft + " , " + boundingRectTop + " ) " + boundingRectWidth + "*" + boundingRectHeight + "\n" + 085 " Quality : " + particleQuality + "\n"; 086 } 087 }