一、杰林码轮廓预测算法
本算法是基于我的《一种全新的图像变换理论的实验》系列博客中的算法构造的轮廓预测算法,能有效的进行细胞轮廓预测,而且从前景到背景支持50个深度层次的轮廓预测。优点:
1、支持各种清晰度和分辨率,通过调整深度层次即可;
2、效率高,算法自主,不是任何 snack、等高线、四叉树等算法;
3、结合聚类算法或分类算法能实现有效识别。
(1)调用方法
int main() { // 3
ULONGLONG t1, t2;
int err;
BmpImage* img;
unsigned char* outputBytesArray = NULL;
char url1[200], url2[200];
int contour_size = 32; // 轮廓预测范围
int jielin_ratio = 21; // 杰林码系数
const char* fileName = "xibao";
sprintf_s(url1, 200, "D:\\WJLCoding\\C++\\AI\\WJL Contour Prediction\\TestImage\\%s.bmp", fileName);
sprintf_s(url2, 200, "D:\\WJLCoding\\C++\\AI\\WJL Contour Prediction\\NewImage\\ContourPrediction-%s-%d-%d.bmp", fileName, contour_size, jielin_ratio);
// 装载BMP,采用灰度图像
img = LoadBmpImage(url1);
outputBytesArray = (unsigned char*)malloc(sizeof(unsigned char) * img->bmpInfoHeader.biWidth * img->bmpInfoHeader.biHeight);
if (outputBytesArray == NULL) {
return 0;
}
// outputBytesArray全部设置为OxFF
memset(outputBytesArray, 0xFF, img->bmpInfoHeader.biWidth * img->bmpInfoHeader.biHeight);
// 灰度图像轮廓预测
t1 = GetTickCount64();
err = WJL_GRAY_CONTOUR_PREDICTION(img->bmpInfoHeader.biWidth, img->bmpInfoHeader.biHeight, contour_size, jielin_ratio, img->rgbdatas->ucR, outputBytesArray);
t2 = GetTickCount64();
// 耗时
printf("变换算法总耗时:%lld ms\n", t2 - t1);
// 释放原始的img->rgbdatas->ucR
if (img->rgbdatas->ucR) free(img->rgbdatas->ucR);
// 重新指定
img->rgbdatas->ucR = outputBytesArray;
// 然后写入到文件url2中
err = SaveBmpImage(url2, img);
// 释放
if (img->rgbdatas->ucR) free(img->rgbdatas->ucR);
if (img->rgbdatas) free(img->rgbdatas);
if (img) free(img);
system("pause");
return 0;
}
(2)函数接口和参数说明
#ifndef _WJLCONTOURPREDICTION_H
#define _WJLCONTOURPREDICTION_H
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************************************************
标记出图像中图形的轮廓
输入参数width:灰度图像的宽
输入参数height:灰度图像的高
输入参数contour_size:轮廓预测的半径,为0则不进行轮廓预测
输入参数jielin_ratio:杰林码系数
输入参数inputBytesArray:灰度图像的数据
输入参数outputBytesArray:灰度图像的数据
返回报错值,0表示无错误
*****************************************************************************************************************/
int WJL_GRAY_CONTOUR_PREDICTION(long width, long height, int contour_size, int jielin_ratio, unsigned char* inputBytesArray, unsigned char* outputBytesArray);
#ifdef __cplusplus
}
#endif
#endif
二、实验一
杰林码系数设定为21(0表示最前景,50表示最背景),轮廓预测范围32,效果如下:
杰林码系数设定为35,轮廓预测范围32,效果如下:
杰林码系数设定为15,轮廓预测范围32,效果如下:
三、实验二
杰林码系数设定为15,轮廓预测范围32,效果如下:
杰林码系数设定为19,轮廓预测范围32,效果如下:
我还测试了真菌、滴虫,均能有效的把图像轮廓获取,根据实际情况需要调整杰林码系数。该算法将在国产细胞扫描仪中应用。并结合加权概率模型聚类算法一同实现识别。
未来应用场景:
1、工业机器识别,如指纹、产品质量检测等等;
2、大型图像识别模型;
3、图像轮廓清晰化处理;
等等。