1. 程式人生 > >[影象去霧](一)限制對比度的自適應直方圖均衡化(CLAHE)的學習體會——影象分塊

[影象去霧](一)限制對比度的自適應直方圖均衡化(CLAHE)的學習體會——影象分塊

最近研究影象去霧演算法,作為菜鳥,慢慢學習。

演算法原理參考以下兩個連結:

http://www.cnblogs.com/Imageshop/archive/2013/04/07/3006334.html

http://blog.csdn.net/u010839382/article/details/49584181

我採用影象分塊計算對映函式再插值增強的方法,可以把演算法實現分為以下幾個步驟:

(1)輸入原圖進行影象分塊

(2)計運算元影象塊的CDF,對映函式

(3)逐畫素根據插值原則,進行插值運算

(4)輸出處理結果圖

選取的測試影象(長551/寬375)


第一步:影象分塊

參考帖子:http://www.matlabsky.com/thread-11379-1-1.html

該貼固定影象塊大小為64*64個畫素

下面修改的程式(MATLAB)可以設定影象塊的數目為num*num,下邊和右邊不能被8整除的,則根據剩餘大小儲存。

<pre name="code" class="java">%區域性直方圖均衡化  

num = 8;
%將影象分成num*num塊
h = ceil(height/num); w = ceil(width/num);

%子影象塊起始行列號向量
t1 = (0:num-1)*h + 1; t2 = (1:num)*h;
t3 = (0:num-1)*w + 1; t4 = (1:num)*w;
figure; 
k = 0;
for i = 1 : num
    for j = 1 : num   
        if(i<num && j<num)
            temp = I(t1(i):t2(i), t3(j):t4(j),:);
        else
            if i == num && j~=num
            temp = I(t1(i):height, t3(j):t4(j),:);
            end
            if j == num && i~=num
             temp = I(t1(i):t2(i), t3(j):width,:);
            end
            if i == num && j==num
             temp = I(t1(i):height, t3(j):width,:);
            end
        end
        k = k + 1;
        subplot(num, num, k);
        imshow(temp);
    end
end


分塊效果如下:

num=2


num=8