New Vision sample program

We’re doing something very similar to the sample code (thresholding, convex hull, particle analysis), and finding it takes about a second to process each image on the cRio–far too slow for automated targeting.

Has anyone else been able to get the code to work onboard, with acceptable performance?

Thanks,

Steve (software mentor for team 649)

Hi,
We copied the sample code into our project and are using the sample images provided. When we run it we get zero particles found. I added some extra code to print a particle report after every image operation and find that there are particles before the final filter is run(see below).

I also had a question about the following lines:


        cc = new CriteriaCollection();
        cc.addCriteria(MeasurementType.IMAQ_MT_BOUNDING_RECT_WIDTH, 30, 400, false);
        cc.addCriteria(MeasurementType.IMAQ_MT_BOUNDING_RECT_HEIGHT, 40, 400, false);

I read through the vision concepts doc and found descriptions of these criteria. But I was not sure if it meant:
a) crop the entire image to the described rectangle and return particles in the cropped area.
b) only return particles that fit in the size of described rectangle, so search entire image for particles that fit.

Here’s the code and output. I am using 10ft2.jpg in this example output. I also tried the other xxft2.jpg images and got the same result, the last filter found zero particles.


            BinaryImage bigObjectsImage = thresholdImage.removeSmallObjects(false, 2);
            printParticleReports("bigobj", bigObjectsImage);

            // fill in occluded rectangles
            BinaryImage convexHullImage = bigObjectsImage.convexHull(false);
            printParticleReports("convexhull", convexHullImage);

            // find filled in rectangles
            BinaryImage filteredImage = convexHullImage.particleFilter(cc);
            printParticleReports("filtered", filteredImage);

The output is jumbled, see this thread: http://www.chiefdelphi.com/forums/showthread.php?t=101438

[cRIO]
[cRIO] * bigobj*********************************************
[cRIO] 031250000000000444 , 0.0 )
[cRIO] Area : 301746.0
[cRIO] percent : 98.224609375
[cRIO] Bounding Rect : ( 0 , 0 ) 640480
[cRIO] Quality : 98.33023755987878
[cRIO]
[cRIO]
[cRIO] Particle(1/2)
[cRIO] Particle Report:
[cRIO] Image Height : 480
[cRIO] Image Width : 640
[cRIO] Center of mass : ( 319 , 240 )
[cRIO] normalized : ( -0.0Particle(2/2)
[cRIO] Particle Report:
[cRIO] Image Height : 480
[cRIO] Image Width : 640
[cRIO] Center of mass : ( 323 , 31 )
[cRIO] normalized : ( 0.009374999999999911 , -0.8708333333333333 )
[cRIO] Area : 272.0
[cRIO] percent : 0.08854166666666666
[cRIO] Bounding Rect : ( 294 , 29 ) 55
7
[cRIO] Quality : 95.77464788732394
[cRIO]
[cRIO]
[cRIO] 2 146.245212
[cRIO] **********************************************
[cRIO]
[cRIO] 652 )
[cRIO] Area : 307200.0
[cRIO] percent : 100.0
[cRIO] Bounding Rect : ( 0 , 0 ) 640480
[cRIO] Quality : 100.0
[cRIO]
[cRIO]
[cRIO] Particle(1/1)
[cRIO] Particle Report:
[cRIO] Image Height : 480
[cRIO] Image Width : 640
[cRIO] Center of mass : ( 319 , 239 )
[cRIO] normalized : ( -0.0031250000000000444 , -0.004166666666666vexhull
********************************************
[cRIO]
[cRIO] * con1 146.837495
[cRIO] **********************************************
[cRIO]
[cRIO]
[cRIO] * filtered*********************************************
[cRIO] 0 147.054589
[cRIO] **********************************************
[cRIO]

Turns out someone had changed the low R param of the RGB filter (from 25 to 40) while switching between our green light filter and sample’s red light filter. I changed it back to 25 and was able to run the sample code in our robot project and find targets. Once that worked we are guessing that the criteria lines add a filter that looks for particles that are in the size range 30,40 to 400,400.


cc.addCriteria(MeasurementType.IMAQ_MT_BOUNDING_RECT_WIDTH, 30, 400, false);
        cc.addCriteria(MeasurementType.IMAQ_MT_BOUNDING_RECT_HEIGHT, 40, 400, false);

These criteria do not crop an image. If that explanation of the bounding rect width/height is incorrect please let me know.

We are a second year team that is trying at this late stage in the build cycle to do some image analysis. We have a high level question to help us visualize how to make this work. We are using Java.

Where is the best place to do the image analysis? It seems we have a couple of possibilities:

  1. Send images from camera to cRio and then run the image analysis code on cRio.
  2. Send images from camera to laptop and then run the image analysis code on laptop
  3. Send images from camera to cRio and access the images using ftp to laptop and run image analysis on laptop

Are teams using all of these alternatives? Which one is most popular?
Recommendations?
Other alternatives we haven’t thought of?
thanks
Dave Fischer - mentor
Jasper Indiana team 3559