40.图像直方图归一化

目录

        1 概念讲解及用处

        2 函数详解

        3 数学原理

        3.1 最小-最大归一化的数学原理

        3.2 均值方差归一化的数学原理

        4 用C++编写代码进行实现

        1 概念讲解及用处

        图像直方图归一化(Histogram Normalization)是一种将图像的直方图进行线性拉伸或均衡化的操作。它通过调整图像中像素灰度级别的分布,使得图像在亮度和对比度上更加均匀,增强了图像的视觉效果。

        直方图归一化常用于以下方面:

        增强图像对比度:通过拉伸图像灰度级别的范围,使得暗部和亮部的细节更加明显。

        图像预处理:在目标检测、图像识别等任务中,对输入图像进行归一化可以提高算法的鲁棒性和准确性。

        2 函数详解

         在OpenCV中,可以使用normalize函数实现图像直方图的归一化。

cv::normalize(InputArray src, OutputArray dst, double alpha=0, double beta=255, int norm_type=NORM_MINMAX, int dtype=-1, InputArray mask=noArray())

src:输入图像或直方图。

dst:输出的归一化结果。

alpha:归一化的最小值。

beta:归一化的最大值。

norm_type:归一化类型,默认为NORM_MINMAX。

dtype:输出数组的数据类型,若为-1,则与输入数组相同。

mask:可选的掩码图像,指定要进行归一化的区域。

        3 数学原理

        直方图归一化是通过线性变换将图像中的像素值映射到一个新的范围内。常见的归一化方法有最小-最大归一化(Min-Max Normalization)和均值方差归一化(Mean-Variance Normalization)。

        3.1 最小-最大归一化的数学原理

dst = (src - min) * (\beta - \alpha) / (max - min) + \alpha

        其中,src是输入图像,dst是输出的归一化结果,min和max分别是输入图像的最小和最大像素值,alpha和beta是归一化的最小和最大值。

        3.2 均值方差归一化的数学原理

        dst = (src - mean) / stddev

        其中,src是输入图像,dst是输出的归一化结果,mean和std_dev分别是输入图像的平均值和标准差。

        4 用C++编写代码进行实现

        下面是一个使用OpenCV对图像进行最小-最大归一化的示例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat image = imread("image.jpg", IMREAD_GRAYSCALE);
    if (image.empty())
    {
        cout << "Failed to load image." << endl;
        return -1;
    }

    // 归一化图像
    Mat normalized;
    double minVal, maxVal;
    minMaxLoc(image, &minVal, &maxVal);
    normalize(image, normalized, 0, 255, NORM_MINMAX, CV_8UC1);

    // 显示结果
    imshow("Original", image);
    imshow("Normalized", normalized);
    waitKey();

    return 0;
}

        在这个示例中,我们首先读取了一张灰度图像,并使用minMaxLoc函数找到图像的最小值和最大值。然后,使用normalize函数将图像进行最小 - 最大归一化,并将结果显示出来。

如果要进行均值方差归一化,只需将normalize函数的参数修改为:

normalize(image, normalized, (mean - min) / (max - min),
 (mean + std_dev - min) / (max - min), NORM_MINMAX, CV_8UC1);

        其中,mean和std_dev分别是输入图像的平均值和标准差。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别叭叭儿—好好学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值