基于灰度世界與白點檢測的局部自動白平衡算法
一.算法原理
1.定義:自動白平衡的目標是消除光源色溫對圖像顏色的影響,使白色物體在不同光照下都能呈現真實的白色。
2.改進點:
1)灰度世界全局處理導致局部色偏。
2)局部白平衡在顏色均勻區域產生的分塊效應。
3.算法設計:
1)局部處理:使用滑動窗口實現局部自適應,避免全局處理導致的色偏。
2)雙策略融合:結合“灰度世界”和“白點檢測”假設
3)重疊窗口:步長小于窗口大小,平滑過渡不同區域的增益。
二.算法結構與代碼
function outImg = AWB_Slide(inputImg, filterSize, weightGray)
stepSize = 40; %偶數同時可被4除盡,避免窗口落在錯誤位置
img = double(inputImg);
[height, width] = size(img);
outImg = zeros(size(inputImg));
%增益矩陣
gainR = zeros(height, width);
gainB = zeros(height, width);
weight = zeros(height, width);
for i = 1:stepSize:height
for j = 1:stepSize:width
%當前窗口
rowStart = max(1, min(i, height-filterSize+1));
colStart = max(1, min(j, width-filterSize+1));
rowEnd = rowStart + filterSize - 1;
colEnd = colStart + filterSize - 1;
window = img(rowStart:rowEnd, colStart:colEnd);
% 分離RGGB
R = window(1:2:end, 1:2:end);
Gr = window(1:2:end, 2:2:end);
Gb = window(2:2:end, 1:2:end);
B = window(2:2:end, 2:2:end);
meanG = (mean(Gr(:)) + mean(Gb(:)))/2;
maxG = max(max(Gr(:)), max(Gb(:)));
% R增益
meanR = mean(R(:));
maxR = max(R(:));
kR = meanG / meanR;
pR = maxG / maxR;
gainRVal = weightGray*kR + (1-weightGray)*pR;
% B增益
meanB = mean(B(:));
maxB = max(B(:));
kB = meanG / meanB;
pB = maxG / maxB;
gainBVal = weightGray*kB + (1-weightGray)*pB;
%增益累計
%R
gainR(rowStart:2:rowEnd, colStart:2:colEnd) = ...
gainR(rowStart:2:rowEnd, colStart:2:colEnd) + gainRVal;
%B
gainB(rowStart+1:2:rowEnd, colStart+1:2:colEnd) = ...
gainB(rowStart+1:2:rowEnd, colStart+1:2:colEnd) + gainBVal;
weight(rowStart:rowEnd, colStart:colEnd) = ...
weight(rowStart:rowEnd, colStart:colEnd) + 1;
end
end
% R
outImg(1:2:height, 1:2:width) = img(1:2:height, 1:2:width) .* ...
(gainR(1:2:height, 1:2:width) ./ weight(1:2:height, 1:2:width));
% B
outImg(2:2:height, 2:2:width) = img(2:2:height, 2:2:width) .* ...
(gainB(2:2:height, 2:2:width) ./ weight(2:2:height, 2:2:width));
outImg(1:2:height, 2:2:width) = img(1:2:height, 2:2:width);
outImg(2:2:height, 1:2:width) = img(2:2:height, 1:2:width);
outImg = uint16(outImg);
end
內存局限:
1.1幀原始Bayer數據(用于當前窗口處理)。
2.gainR、gainB、weight 矩陣各需1幀內存(存儲累加值)。
浙公網安備 33010602011771號