图像灰度变换:提升图像质量的简单方法

通过分析图像中像素的取值分布,对像素值进行映射变换可以达到改善图像质量的目的。本教程实现一种简单的灰度变换,首先计算输入图像的像素值区间为[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);
            }
        }
    }
}

代码解释:

  1. 寻找最大值和最小值: 首先遍历图像像素,找到像素值的最小值 minY 和最大值 maxY
  2. 线性映射: 如果 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录