/** * Fill in the particle analysis report. * For a given image, fill in the particle analysis report structure. * @param imageParam the image to use * @param particleNumber the particle index in the set of particles for the image * @param par the particle analysis report to be filled in */ int BinaryImage::ParticleAnalysis(Image* imageParam, int particleNumber, ParticleAnalysisReport* par) { int success = 0; success = imaqGetImageSize(imageParam, &par->imageWidth, &par->imageHeight); wpi_imaqAssert(success, "Error getting image size"); par->particleIndex = particleNumber; success = imaqCountParticles(imageParam, TRUE, NULL); wpi_imaqAssert(success, "Error counting particles"); par->center_mass_x = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_CENTER_OF_MASS_X); par->center_mass_y = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_CENTER_OF_MASS_Y); par->particleArea = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_AREA); par->boundingRect.top = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_BOUNDING_RECT_TOP); par->boundingRect.left = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_BOUNDING_RECT_LEFT); par->boundingRect.height = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_BOUNDING_RECT_HEIGHT); par->boundingRect.width = (int) particleMeasurement(imageParam, particleNumber, IMAQ_MT_BOUNDING_RECT_WIDTH); par->particleToImagePercent = particleMeasurement(imageParam, particleNumber, IMAQ_MT_AREA_BY_IMAGE_AREA); par->particleQuality = particleMeasurement(imageParam, particleNumber, IMAQ_MT_AREA_BY_PARTICLE_AND_HOLES_AREA); /* normalized position (-1 to 1) */ par->center_mass_x_normalized = NormalizeFromRange(par->center_mass_x, par->imageWidth); par->center_mass_y_normalized = NormalizeFromRange(par->center_mass_y, par->imageHeight); return success; }
/** * Get then number of particles for the image. * @returns the number of particles found for the image. */ int BinaryImage::GetNumberParticles() { int numParticles = 0; int success = imaqCountParticles(image, 1, &numParticles); wpi_imaqAssert(success, "IMAQ Error counting particles"); return numParticles; }
/** * Measure a single parameter for an image. * Get the measurement for a single parameter about an image by calling the imaqMeasureParticle * function for the selected parameter. * @param image the image to measure * @param particleNumber which particle in the set of particles * @param whatToMeasure the imaq MeasurementType (what to measure) * @returns the value of the measurement */ double BinaryImage::ParticleMeasurement(int particleNumber, MeasurementType whatToMeasure) { double returnDouble; int success; success = imaqMeasureParticle(m_imaqImage, particleNumber, 0, whatToMeasure, &returnDouble); wpi_imaqAssert(success, "Error measuring particle"); if (!success) return 0.0; else return returnDouble; }
/** * Create a new image by loading a file. * @param fileName The path of the file to load. */ RGBImage::RGBImage(const char *fileName) : ColorImage(IMAQ_IMAGE_RGB) { int success = imaqReadFile(m_imaqImage, fileName, NULL, NULL); wpi_imaqAssert(success, "Imaq ReadFile error"); }