This section will show the utility of the image processing functions on Clarity 2.0. I’ve collected some images here from my color based image processing system that is using a test strip that has a barcode encoded on the end of it. The other half of it being used for the color processing for further testing. Our intent is to show decoding. This is a set of pictures that are in color. Decoding doesn’t operate on color. So the first image processing step is to Convert to Grayscale [under Process Type], to monochrome, so that further processing can be done. As you can see the entire image is processed and made available for further processing.
Let’s try now to decode [click on Decode plug-in at top of screen] these barcodes in these images, covering the image area that’s used for decoding [using the region of interest]. In the straight form that they are in, none of these images seem to decode. The decode processing might be enhanced by reducing the decode window [or Region of Interest] to more closely match the barcode area. Indeed some of the codes that previously did not decode will now decode. But not all of them. And certainly the window is not following the image on each of the different input picture selections.
What I’ve done in an attempt to bracket the decode processing is I’ve invoked a Pattern Match step that’s trained on this lower corner of the Data matrix barcode. It’s somewhat successful on most of the images in locating a clean edge. But as you can see by the red box, some of them are scoring low as far as a match of pattern. Most of the times the mismatch occurs when there is some notably dotted edge pattern that it’s trying to match the training pattern [Train New Pattern] of a straight line with.
We’re going to add the decode step to this, bracket the barcode, and tie the decoding process to the pattern match step. Again, we have to use the image process input to the decode process because the decode process requires a monochrome image. Now as I roll through the images, you can see the decode box somewhat follows the pattern match. But again sometimes the pattern match is not in exactly the right place compared to the decode box.
There may be something we can do to improve the pattern match processing. Let’s remove this decode step [Delete Step]. Let’s add another image processing step and let’s move this step to work on the original monochrome image. Let’s see what kind of processing we can do to this image to help possibly change the performance of the pattern matching. If I take and apply a smoothing filter [Process Type: Smooth] to the image that is being used for the pattern match, I see that my pattern matching is getting better. We can change the factor of Smoothing, the sigma factor, and now see that I’m getting good pattern match scores pretty much for every image now.
There are still a few that are not quite close. But let’s see how the decode then follows the anchored pattern in the decode window and see if the decode window stays well placed with the image. This will be Anchored again to Pattern Match. This Pattern Match must use the processed image. Let’s see now how our decode window follows our code.
The decode window is following the code much more succinctly now, but there are still images that are not being decoded very well. The decode processing can either use the first image or the Smooth image. This may not be optimal to use the Smooth image. So what I’m going to do is remove this decode step. And I’m going to add another image processing step that’s now going to use the acquired image and Convert it to Grayscale. And then I’ll try and use my decode on this original monochrome converted image. Which retains the original sharpness. But now the anchor is the item that’s moving based on the Smooth image and the decode process is decoding on the original resolution/non-smoothed image. But the decode window is now following much closer to the barcode based on the cleaner operating pattern match process. Again, there are still codes in there that do not decode.
Once again, we can use image processing to possibly enhance the decode process that follows. This time I’m going to use the Image Processing. I’m going to stack two image processing on top of each other. The first is convert to grayscale. And this one is going to be a normalize function. We want to set this to be the entire operational window. Now this has been adjusted to achieve even contrast across the image. There is as much white as there is black to this image. And we will put a decode step again at the end of the whole process. Match it pretty closely to the code that we see. Because it will be set to move with the pattern match anchor. And now let’s see if all the codes decode.
We’re having problem with one of the images, but it’s not the same image we were having problems with before. Now a little bit of adjustment. And as you can see every one now decodes because of the processing we’ve applied. Convert to grayscale, normalize the image, and decode.
This first three parts are acquire the image, process it to grayscale, smooth it for the sake of better pattern matching, to become the anchor for subsequent processing, down here in the decoder, which is tied to that anchor. We can retrieve the original acquired image, convert again to grayscale, normalize that image to help enhance the decoding process, and now all the images decode properly. All the decode windows follow the barcode that’s on the end of the sample strip, and we’ve achieved the goal of having 100% decode.
One important thing to note: image processing is intended to basically process images that stay within the camera and are used for some subsequent processing, such as decoding, that would yield an output from the device that’s loaded with the Clarity script. Image processing, by itself, does not output a scanner level output, such as a decode answer. There’s no way to retrieve the image out of the pre-processing steps.