目錄
圖像歸規(guī)范化可以消除其采集過程中造成的灰度變化戚长,使圖像自身的均值和方差符合設(shè)定值批钠。不僅有增強(qiáng)視覺效果的作用宇植,還可以利用圖像像的一致性,給后續(xù)的操作提供相同基準(zhǔn)埋心。
系統(tǒng)環(huán)境:Windows10 64 位+OpenCV3.4.1 64 位
1指郁、理論基礎(chǔ)
圖像的灰度均值代表整幅圖像灰度平均水平,方差代表圖像灰度偏離平均灰度的幅度拷呆。因而可以以原圖像的灰度均值和方差為參照闲坎,利用設(shè)定的基準(zhǔn)灰度均值和均方差疫粥,重新調(diào)整圖像的灰度分布。
根據(jù)原有圖像標(biāo)準(zhǔn)差和給定標(biāo)準(zhǔn)差(均方差)比值乘以原圖像灰度值與灰度均值的差來調(diào)整對應(yīng)位置的灰度值腰懂。調(diào)整后整幅圖像的灰度值分布在給定均值上下梗逮,原圖中對應(yīng)位置灰度小于均值的,調(diào)整后圖像灰度值仍小于設(shè)定均值绣溜,反之亦然慷彤。
2、具體步驟
(1)先計算出圖像的方差var和mean
其中怖喻,W和H分別指圖像的寬度和高度瞬欧,I(x,y)?表示圖像在(x,y)處的灰度值。
(2)重新計算圖像對應(yīng)位置的灰度值
遍歷整幅圖像罢防,根據(jù)給定的m0均值和標(biāo)準(zhǔn)差v0(m0=80,v0=50)艘虎,重新計算圖像對應(yīng)位置的灰度值:
3、算法實現(xiàn)
本文以指紋圖像的灰度規(guī)范化為例咒吐,實現(xiàn)圖像規(guī)范化程序
#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; //標(biāo)準(zhǔn)差
cv::meanStdDev(input, mean, stddev); //計算均值和標(biāo)準(zhǔn)差
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野建、結(jié)果
上圖左側(cè)為輸入圖像,右側(cè)為調(diào)整后的圖像恬叹『蛏可以發(fā)現(xiàn),在調(diào)整后指紋圖像中绽昼,指紋紋線更清晰唯鸭,圖像整體灰度分布比較均勻。
關(guān)注公眾號【Slater】硅确,回復(fù)“1024”即可免費領(lǐng)取110本經(jīng)典編程電子書目溉。