04-06-2026 12:49 PM
I have a vi I am working with to try to calibrate my vision camera. I have the pictures and the dot matrix. When I go through the calibration process I am getting Insufficient Data = true when I am done. Am I doing something wrong?
Solved! Go to Solution.
04-06-2026 04:33 PM
Hi aeastet,
Following example <LabVIEW>\examples\Vision\Stereo Vision\Compute Depth Image\Compute Depth Image.vi
I could make it return some internal parameter values with "Insufficient Data" = false.
I think you were overwriting the previous calibration at each iteration instead of combining all the calibration images in a single template image.
See the modified version attached.
Regards,
Raphaël.
04-06-2026 05:44 PM
@raphschru wrote:
Hi aeastet,
Following example <LabVIEW>\examples\Vision\Stereo Vision\Compute Depth Image\Compute Depth Image.vi
I could make it return some internal parameter values with "Insufficient Data" = false.
I think you were overwriting the previous calibration at each iteration instead of combining all the calibration images in a single template image.
See the modified version attached.
Regards,
Raphaël.
That worked great. I am still trying to get my head around what vision is looking for even though I have been doing this on and off again for years. Vision or IMAQ never seems to work the way I am expecting.
Thanks again.
04-07-2026 01:55 AM
Vision is a complex topic in itself and IMAQ makes it not always easier.
First what we do intuitively with our eyes and brain can be rather complicated to replicate with computers. Transforming our intuitive process to an algorithmic implementation is prone to many problems.
The other thing you need to remember is that an IMAQ resource very much behaves like a LabVIEW refnum. Unlike the other LabVIEW datatypes that are value based, IMAQ refnums are reference based. That can be very confusing for normal LabVIEW users. If you branch a string off and change its value in one branch you now have two different strings in memory. If you branch an IMAQ resource off and change the image content in one, your other branched off IMAQ resource will also contain the new image, since the IMAQ resource is only a reference to the actual image data.
Since images are often huge memory lumps, not treating an IMAQ resource as reference would more often than not create an out of memory error dialog, since every wire branch would create a new copy of the whole image. The IMAQ developers had the choice to try to educate the users to never branch off IMAQ wires unnecessarily or to implement an IMAQ resource as a reference, somewhat breaking the usual by value paradigm of LabVIEW wires. Guess which one felt easier to do 😀.
04-08-2026 08:03 AM - edited 04-08-2026 08:06 AM
@rolfk wrote:
Vision is a complex topic in itself and IMAQ makes it not always easier.
First what we do intuitively with our eyes and brain can be rather complicated to replicate with computers. Transforming our intuitive process to an algorithmic implementation is prone to many problems.
The other thing you need to remember is that an IMAQ resource very much behaves like a LabVIEW refnum. Unlike the other LabVIEW datatypes that are value based, IMAQ refnums are reference based. That can be very confusing for normal LabVIEW users. If you branch a string off and change its value in one branch you now have two different strings in memory. If you branch an IMAQ resource off and change the image content in one, your other branched off IMAQ resource will also contain the new image, since the IMAQ resource is only a reference to the actual image data.
Since images are often huge memory lumps, not treating an IMAQ resource as reference would more often than not create an out of memory error dialog, since every wire branch would create a new copy of the whole image. The IMAQ developers had the choice to try to educate the users to never branch off IMAQ wires unnecessarily or to implement an IMAQ resource as a reference, somewhat breaking the usual by value paradigm of LabVIEW wires. Guess which one felt easier to do 😀.
Thanks for the input rolfk,
I have been using LabVIEW for almost 30 years now. I have been using IMAQ and vision for many of those years. Vision seems like they had ten groups developing it and no one was talking to each other. I have a vi where I get info but the set info has a completely different input cluster. A vi only takes this type but not that type and there is no fast way to convert it. The examples really suck. I have been able to work my way through things over the years.
It took me a few years to realize that I need to make a copy of the image to do anything to it if I do not what to have it effect the original image. I also need to make a copy if I am doing multi operations on the same image. How the image reference work is not the same as it is in LabVIEW. Like I said I have been doing this for a while and it still seems like vision is much harder than it need sot be. It seems easy when I finally get the solution working. Ai is useful in point out a few things now. It also takes you down rabbit holes that you spend hours on only to find out the solution was very simple.
I would love to see support for vision come back. I would love to be much better at it. I have no real need for it at work. I am working on a vision processing software package for finding apriltags for FIRST robotics. That is a high school robotics program that teaches students how to design and program a robot and compete. LabVIEW used to dominate in this program. Now it is a joke. I created this software to show the students that LabVIEW can do complicated stuff too. I wanted to give them exposure to LabVIEW since we no longer use LabVIEW to program the robot. I still get to feel useful while I am learning Java.
04-08-2026 12:35 PM
rolfk,
I do have one more question if you will indulge me. I have the calibration from the vi from above. I saved the calibrated image so I can use that to fix the images coming from the camera. What is the proper way to add the calibration to the raw image? I was told that this was all I need to do. Is this correct?
04-08-2026 01:33 PM - edited 04-08-2026 01:49 PM
IMAQ Vision has in fact an even more colorful history than just 10 different developer groups. Originally it was a VI Toolkit called Concept V.I. and developed by the Aliance member Graftek. It was originally developed for LabVIEW when LabVIEW was still only running on Macintosh computers. The VI functions supported many image operations, but the VI interface was for nowadays standards a bit archaic. No error cluster, a special cluster datatype that looked like a string showing the image reference name and the rest of the data hidden. The C code behind the CINs (there were no shared libraries or DLLs back then) at that time were doubtlessly quite involved but I can only guess how much trouble it was to maintain that all, since every VI had its own CIN that required its own C code file that had to be compiled and loaded into the VI after every little change. A true maintenance nightmare.
Then in 1996 or thereabout, NI entered the vision market themselves and rather than developing their own solution, they reached an agreement with Graftek to the rights for Concept V.I. Graftek continued to do vision solutions but more or less retreated from the LabVIEW world. NI went and redesigned the Toolkit by cleaning up the C files, adding a native datatype for the IMAQ resource, integrating it with their drivers for their image acquisition hardware they were developing, and redesigning the VI interfaces to use the by now well known error cluster. The C code backend was recompiled as a single shared library that each VI could call the according function(s) from through the Call Library Node. And extensions were added to the library such as overlays, ROI and several more things.
And yes it was a bit of a stop and go project. Unlike the LabVIEW team that was a permanent group with many of its members working there for 10 and even 20 years, the vision group was a small team that developed a new feature to add to the toolkit, then the new toolkit was released and that was it for a while, with only a few technical support people remaining. Then a new feature was decided upon and everything started again. And in true software developer tradition there are always 1 more option how to architect a software than you have developers working on it, so yes paradigms changed several times. Some people were hired from other companies to integrate a new feature or product that was similar to what they had worked on before, such as the SmartCameras that were basically an idea developed in a group at Philips and when Philips decided that it was not a technology they wanted to commercialize, someone from that team went to NI and helped develop these SmartCameras.
So yes, it certainly has several different developers who were working at different times on it. And it always was a side project and not exactly a major division of its own within NI, unlike DAQ or LabVIEW, or GPIB which was still the biggest group within NI in the early 90ies.
As to your question about image calibration, I'm sorry but it has been more than 10 years that I used that function and even then only very briefly. We used overlay and the caliper function but that was about it.