您好,登錄后才能下訂單哦!
這篇文章給大家介紹自動白平衡之完美反射算法原理及C++實(shí)現(xiàn)是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
前言
昨天介紹的灰度世界算法是最原始的處理白平衡的算法。今天要介紹的完美反射算法也是自動白平衡常用的算法之一。一起來看看吧。
算法原理
完美反射理論假設(shè)圖像中最亮的點(diǎn)就是白點(diǎn),并以此白點(diǎn)為參考對圖像進(jìn)行自動白平衡,最亮點(diǎn)定義為R+G+B的最大值。
算法過程
計算每個像素R,G,B之后,并保存
按照R+G+B的值的大小計算出其前10%或其他Ratio的白色參考點(diǎn)的閾值T
遍歷圖像中的每個點(diǎn),計算其中R+G+B值大于T的所有點(diǎn)的R\G\B分量的累積和的平均值
將每個像素量化到[0, 255]
代碼實(shí)現(xiàn)
Mat PerfectReflectionAlgorithm(Mat src) { int row = src.rows; int col = src.cols; Mat dst(row, col, CV_8UC3); int HistRGB[767] = { 0 }; int MaxVal = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { MaxVal = max(MaxVal, (int)src.at<Vec3b>(i, j)[0]); MaxVal = max(MaxVal, (int)src.at<Vec3b>(i, j)[1]); MaxVal = max(MaxVal, (int)src.at<Vec3b>(i, j)[2]); int sum = src.at<Vec3b>(i, j)[0] + src.at<Vec3b>(i, j)[1] + src.at<Vec3b>(i, j)[2]; HistRGB[sum]++; } } int Threshold = 0; int sum = 0; for (int i = 766; i >= 0; i--) { sum += HistRGB[i]; if (sum > row * col * 0.1) { Threshold = i; break; } } int AvgB = 0; int AvgG = 0; int AvgR = 0; int cnt = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { int sumP = src.at<Vec3b>(i, j)[0] + src.at<Vec3b>(i, j)[1] + src.at<Vec3b>(i, j)[2]; if (sumP > Threshold) { AvgB += src.at<Vec3b>(i, j)[0]; AvgG += src.at<Vec3b>(i, j)[1]; AvgR += src.at<Vec3b>(i, j)[2]; cnt++; } } } AvgB /= cnt; AvgG /= cnt; AvgR /= cnt; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { int Blue = src.at<Vec3b>(i, j)[0] * MaxVal / AvgB; int Green = src.at<Vec3b>(i, j)[1] * MaxVal / AvgG; int Red = src.at<Vec3b>(i, j)[2] * MaxVal / AvgR; if (Red > 255) { Red = 255; } else if (Red < 0) { Red = 0; } if (Green > 255) { Green = 255; } else if (Green < 0) { Green = 0; } if (Blue > 255) { Blue = 255; } else if (Blue < 0) { Blue = 0; } dst.at<Vec3b>(i, j)[0] = Blue; dst.at<Vec3b>(i, j)[1] = Green; dst.at<Vec3b>(i, j)[2] = Red; } } return dst;}
效果
關(guān)于自動白平衡之完美反射算法原理及C++實(shí)現(xiàn)是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。