图像规范化之OpenCV实现

本文介绍了如何使用OpenCV进行图像规范化,通过计算图像的方差和均值,再依据设定的基准灰度均值和方差调整图像灰度,使得图像灰度分布更加均匀,提升视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、理论基础

2、具体步骤

(1)先计算出图像的方差var和mean

(2)重新计算图像对应位置的灰度值

3、算法实现

 4、结果


图像归规范化可以消除其采集过程中造成的灰度变化,使图像自身的均值和方差符合设定值。不仅有增强视觉效果的作用,还可以利用图像像的一致性,给后续的操作提供相同基准。

系统环境:Windows 10 64 位 + OpenCV3.4.1 64位

1、理论基础

图像的灰度均值代表整幅图像灰度平均水平,方差代表图像灰度偏离平均灰度的幅度。因而可以以原图像的灰度均值和方差为参照,利用设定的基准灰度均值和均方差,重新调整图像的灰度分布。

根据原有图像标准差和给定标准差(均方差)比值乘以原图像灰度值与灰度均值的差来调整对应位置的灰度值。调整后整幅图像的灰度值分布在给定均值上下,原图中对应位置灰度小于均值的,调整后图像灰度值仍小于设定均值,反之亦然。

2、具体步骤

(1)先计算出图像的方差var和mean

mean=\frac{1}{W\times H}\sum_{x=0}^{W-1}\sum_{y=0}^{H-1}I(x,y)

var=\frac{1}{W\times H}\sum_{x=0}^{W-1}\sum_{y=0}^{H-1}(I(x,y)-mean)^{2}

其中,WH分别指图像的宽度和高度,I(x,y)表示图像在(x,y)处的灰度值。

(2)重新计算图像对应位置的灰度值

遍历整幅图像,根据给定的m0均值和标准差v0(m0=80,v0=50),重新计算图像对应位置的灰度值:

3、算法实现

本文以指纹图像的灰度规范化为例,实现图像规范化程序

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;

int main(int argc, char *argv[]) 
{
    Mat input = imread("fingerprint.jpg", 0);

    Scalar mean;  //均值
    Scalar stddev;  //标准差

    cv::meanStdDev(input, mean, stddev);  //计算均值和标准差

    double mean_pxl = mean.val[0];
    double stddev_pxl = stddev.val[0];

    //cout << "mean:" << floor(mean[0]) << " " << "stddev:" << floor(stddev[0]) << endl;

    Mat out(input.size(), CV_8UC1, Scalar(0));

    int m0 = 80, f0 = 50;

    for (int i = 0; i < input.rows; i++)	
    {
        for (int j = 0; j < input.cols; j++)
        {
	        int temp = 0; 
	        temp = m0 + (f0 / floor(stddev[0]))*((input.at<uchar>(i, j)-floor(mean[0])));
			
	if (temp > 255)
	{
	    temp = 255;
	}else 
	if (temp < 0)
	{
	    temp = 0;
	}

	   out.at<uchar>(i, j) = temp;

	   }
    }

    imshow("src", input);
    imshow("normalize", out);

    waitKey(0);
    system("pause");

    return 0;
}

 4、结果

 上图左侧为输入图像,右侧为调整后的图像。可以发现,在调整后指纹图像中,指纹纹线更清晰,图像整体灰度分布比较均匀。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值