Click here to show toolbars of the Web Online Help System: show toolbars |
/*******************************************************************************/ /* * File name: SimpleDilateErode.cpp * Location: See Matrox Example Launcher in the MIL Control Center * * * Synopsis: This program improves the quality of the segmented image * using morphological erosion and dilation operations. * * Copyright (C) Matrox Electronic Systems Ltd., 1992-2016. * All Rights Reserved */ #include <mil.h> /* Source MIL image file specifications. */ #define IMAGE_FILE M_IMAGE_PATH MIL_TEXT("Preprocessing/DotMatrixSerial.mim") /* Small salt and pepper noise radius (in pixels). */ #define SMALL_NOISE_RADIUS 1L /* Max distance between the dots of the characters (in pixels). */ #define CHARACTER_MAX_DOT_SPACING 6L int MosMain(void) { MosPrintf(MIL_TEXT("[EXAMPLE NAME]\nSimpleDilateErode\n\n")); MIL_ID MilApplication, /* Application identifier. */ MilSystem, /* System identifier. */ MilDisplay, /* Display identifier. */ MilImage, /* Image buffer identifier. */ BinImage; /* Binary image buffer identifier. */ MIL_INT SizeX, SizeY; /* Allocate objects. */ MappAllocDefault(M_DEFAULT, &MilApplication, &MilSystem, M_NULL, M_NULL, M_NULL); MdispAlloc(MilSystem, M_DEFAULT, MIL_TEXT("M_DEFAULT"), M_WINDOWED, &MilDisplay); /* Restore source image in an image buffer and display it. */ MbufRestore(IMAGE_FILE, MilSystem, &MilImage); MdispSelect(MilDisplay, MilImage); /* Inquire the image dimensions. */ MbufInquire(MilImage, M_SIZE_X, &SizeX); MbufInquire(MilImage, M_SIZE_Y, &SizeY); /* Allocate a binary image buffer for fast processing. */ MbufAlloc2d(M_DEFAULT, SizeX, SizeY, 1+M_UNSIGNED, M_IMAGE+M_PROC, &BinImage); /* Pause to show the original image. */ MosPrintf(MIL_TEXT("\nThis program segments the dot matrix\n")); MosPrintf(MIL_TEXT("characters in the displayed image.\n")); MosPrintf(MIL_TEXT("Press <Enter> to continue.\n\n")); MosGetch(); /* Binarize the image. */ MimBinarize(MilImage, BinImage, M_BIMODAL+M_LESS, M_NULL, M_NULL); /* Erode the image to remove small salt and pepper noise. */ MimErode(BinImage, BinImage, SMALL_NOISE_RADIUS, M_BINARY); /* Dilate the image to merge the character dots. */ MimDilate(BinImage, BinImage, CHARACTER_MAX_DOT_SPACING/2 + SMALL_NOISE_RADIUS, M_BINARY); /* Display the resulting image. */ MbufClear(MilImage, 0); MbufClearCond(MilImage, 255, 0, 255, BinImage, M_EQUAL, 1); /* Pause to show the resulting image. */ MosPrintf(MIL_TEXT("The dot matrix characters have been segmented using\n")); MosPrintf(MIL_TEXT("morphological erosion and dilation operations.\n\n")); MosPrintf(MIL_TEXT("Press <Enter> to end.\n")); MosGetch(); /* Free all allocations. */ MbufFree(BinImage); MbufFree(MilImage); MdispFree(MilDisplay); MappFreeDefault(MilApplication, MilSystem, M_NULL, M_NULL, M_NULL); return 0; }