目录
方法原理
1.找到该灰度图像灰度值的最大值(max_value)和最小值(min_value)
2.确定拉伸后的灰度范围HistogramStrench_min~HistogramStrench_max
3.遍历灰度图像(image)得到拉伸后的灰度图像
公式如下
image[i] = HistogramStrench_min + (((image[i] - min_value) * (HistogramStrench_max - HistogramStrench_min)) / (max_value - min_value));
代码实现
void histogram_stretch(unsigned char* img, int h, int w)
{
int i, j;
int max_value = img[0];
int min_value= img[0];
int HistogramStrench_min = 20;//拉伸后的目标灰度
int HistogramStrench_max = 240;//拉伸后的目标灰度
unsigned char* tempimg = (unsigned char*)malloc(h*w);
memcpy(tempimg, img, h*w);
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
//找出像素的最大值和最小值
if (max_value < tempimg[i*w + j])
max_value = tempimg[i*w + j];
else if (min_value > tempimg[i*w + j])
min_value = tempimg[i*w + j];
}
}
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
tempimg[i*w + j] = HistogramStrench_min + (((img[i] - min_value) * (HistogramStrench_max - HistogramStrench_min)) / (max_value - min_value));
}
}
memcpy(img, tempimg, h*w);
free(tempimg);
}