图像灰度变换:提升图像质量的简单方法
图像灰度变换:提升图像质量的简单方法
通过分析图像中像素的取值分布,对像素值进行映射变换可以达到改善图像质量的目的。本教程实现一种简单的灰度变换,首先计算输入图像的像素值区间为[minY, maxY],然后将像素值线性地映射到区间[0, 255]。
函数原型:
//自适应图像灰度变换
void adjustBrightnessAdaptive(int imageDataMatGray[][MAX_IMAGE_WIDTH], //灰度图二维数组
int height, int width); //图像的高度和宽度(单位:像素)
函数定义:
void adjustBrightnessAdaptive(int imageDataMatGray[][MAX_IMAGE_WIDTH], int height, int width)
{
//找出像素值的最大值和最小值
int minY = 255, maxY = 0;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (imageDataMatGray[i][j] < minY)
{
minY = imageDataMatGray[i][j];
}
if (imageDataMatGray[i][j] > maxY)
{
maxY = imageDataMatGray[i][j];
}
}
}
//线性映射像素值
if (maxY > minY)
{
double k = 255.0 / (maxY - minY);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
imageDataMatGray[i][j] = (int)((imageDataMatGray[i][j] - minY) * k + 0.5);
}
}
}
}
代码解释:
- 寻找最大值和最小值: 首先遍历图像像素,找到像素值的最小值
minY和最大值maxY。 - 线性映射: 如果
maxY大于minY,则根据公式k = 255.0 / (maxY - minY)计算线性映射系数k。然后,再次遍历图像像素,将每个像素值imageDataMatGray[i][j]映射到新的区间:[0, 255],公式为(int)((imageDataMatGray[i][j] - minY) * k + 0.5)。
总结:
该方法通过线性映射将像素值分布调整到更合理的区间,从而提升图像对比度,使图像细节更清晰可见。该方法简单易懂,易于实现,是图像处理中常用的技术之一。
原文地址: https://www.cveoy.top/t/topic/oM1i 著作权归作者所有。请勿转载和采集!