05 Jun 2010
Çektiğimiz fotoğrafların çoğu zaman bazı etkenlerden dolayı kaliteli olmadığını görürsünüz. Hatırlarsanız yetersiz ışık seviyesinde çekilen fotoğraflarda bulanık veya flu diye tabir edebileceğimiz renlerin veya tonların keskin şekilde belli olmaması gibi bir durumla karşılaşabiliriz.
Bu durumda resim pek keyif vermeyen bir görünümde olacaktır. İşte bu gibi durumlarda resmin histogram eşitlemesini yapabiliriz. Histogram eşitlemesi demek: resmin histogram eğrisi grafiğinden görüldüğü üzere grafiğin bir kısmında oluşan yoğunlaşmayı grafiğe homojen şekilde dağıtmaya çalışmak ve görüntü üzerinde bir nevi düzeltme çalışması yapmaktır. Dolayısı ile yandaki resim biraz bulanık görünmektedir.
Dolayısıyla histogram eşitleme resmin renk çeşitliliğini artırır ve göze daha rahat ve algılanabilir hale getirir. Önceden resim koyu ağırlıklı veya açık ağırlıklı renklerden oluşuyorsa histogram eşitleme yapıldıktan sonra resim koyu ve açık renklerin ikisini de içerir hale gelir ve daha net görünür. Aşağıda histogram grafiği verilmiş bir resmin orjinal fotoğrafta orta tarafa yoğunlaşmış şekilde biriktiğini görüyoruz. İşte eşitleme işleme bunu resimde tüm koyuluklar içerilecek şekilde tüm resim geneline yayılmaktadır.
// Buraya resmin histogram grafikleri konulacak…
Aşağıda histogram eşitlemesi yapılan bazı resimleri görebilirsiniz.
Kaynak kod: indirin
% Written by Mehmet Akif AKKUS
% mail: akifakkus@ceng.metu.edu.tr
% sekilver.net/akifsblog.com/
function[] = hw1_3(I, Ihisteq)
[F, props] = myimread(I);
imW = props(1); %width of image
imH = props(2); %height of image
imL = props(3); %L of image
nk = zeros(imL+1, 1);
prrk = zeros(imL+1, 1);
result = zeros(imL+1, 1);
MN = imH * imW;
for i = 1:imW
for j=1:imH
k = uint16(F(j,i));
k = k+1;
nk(k) = nk(k) + 1; % bir yogunluk degerinin kac kez gectigini bul
end
end
for i = 1:imL+1 %yogunluk degerlerinin yuzdeliklerini bul
prrk(i) = nk(i) / MN;
end
temp = zeros(1);
for i=1:imL+1
temp = temp + prrk(i);
result(i) = uint16(imL*temp); % ? islemi ile yeni histogram degerlerini bul
end
f_result = F;
for i = 1:imW %% 320
for j=1:imH %%240
temp = F(j,i);
f_result(j,i) = result(temp+1); % resmi yeniden bicimlendir ve sonucu f_result yaz
end
end
imshow(F);
figure, imshow(f_result);
myimwrite(Ihisteq, props, f_result);
}