Performs image segmentation and color reduction using the K-means algorithm.
#include "Ltimgcor.h"
L_LTIMGCOR_API L_INT L_KMeansBitmapSegmentation(pBitmap, nCluster, ppOutCenters, nOutCentersCount, pInCenters, uFlags)
Pointer to the bitmap handle.
An integer that represents the number of output clusters or colors in the output image. Valid values range from 2 to 255. The default value is 4.
Pointer of a pointer to L_COLORREF values that will be filled with the centers of the output clusters.
Pointer to an integer that represents the number of output clusters.
Pointer to L_COLORREF values that represents the initial centers of the clusters. Used whenever the Type is KMEANS_USERDEFINED input clusters.
Flag that specifies which initializing algorithm to use when choosing the initial centers for the clusters.
Value | Meaning |
---|---|
KMEANS_RANDOM | [0x0001] Use a Random sampling algorithm to set the initial means. This is the default value. |
KMEANS_UNIFORM | [0x0002] Use a Uniform sampling algorithm to set the initial means. |
KMEANS_USERDEFINED | [0x0003] Use an array of user-defined initial centers to set the initial means. |
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
K-Means is an algorithm for analyzing data. Each observation gets placed in the cluster having the mean nearest it. The number of clusters returned are less than or equal to the number of input clusters. If the image contains fewer clusters than the number of input clusters, the ppOutCenters
parameter will be filled with the centers of the output clusters.
This function can only process entire images. It does not support regions.
This function supports 12- and 16-bit grayscale and 48- and 64-bit color images.
This function supports signed/unsigned images.
Kmeans Segmentation Function - Before
Kmeans Segmentation Function - After
View additional platform support for this Kmeans Segmentation function.
Win32, x64, Linux.
This example loads a bitmap and applies KMeans segmentation.
L_INT KMeansBitmapSegmentationExample(L_VOID)
{
L_INT nRet;
BITMAPHANDLE LeadBitmap; /* Bitmap handle to hold the loaded image. */
/* Load the bitmap, keeping the bits per pixel of the file */
nRet = L_LoadBitmap(MAKE_IMAGE_PATH(TEXT("DICOM\\IMAGE3.dcm")), &LeadBitmap, sizeof(BITMAPHANDLE), 0, ORDER_BGR, NULL, NULL);
if (nRet != SUCCESS)
return nRet;
L_COLORREF* poutCenters = NULL;
L_INT outCount;
nRet = L_KMeansBitmapSegmentation(&LeadBitmap, 5, &poutCenters, &outCount, NULL, KMEANS_RANDOM);
L_FreeKmeansOutput(poutCenters);
if (nRet != SUCCESS)
return nRet;
nRet = L_SaveBitmap(MAKE_IMAGE_PATH(TEXT("Result.BMP")), &LeadBitmap, FILE_BMP, 24, 0, NULL);
if (nRet != SUCCESS)
return nRet;
//free bitmap
if (LeadBitmap.Flags.Allocated)
L_FreeBitmap(&LeadBitmap);
return SUCCESS;
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document