Site saati: 10 Eyl Cum, 2010 22:50

  En Popüler Makaleler - En Çok Oy Alan Makaleler - Son Makaleler

Yazar: Seyhan Agaoglu Tarih: 04 Arl Cum, 2009 18:29 Gösterim 1302
Açıklama: Median Cut, Huffman, Görüntü Sıkıştırma, RGB
Kategori: Haberleşme Ana Bilim Dalı Tip: Uygulama
Yazara ait makale sayısı: 4
Yazar tarafından gönderilen tüm makaleleri bul

Median Cut ve Huffman Uygulayarak Görüntü Sıkıştırma

İçerik
1 - Giriş
2 - Median Cut
3 - Uniform Kuantalama
4 - Huffman Kodlama
5 - Sıkıştırma Algoritmasının Gerçeklenmesi
6 - Simülasyon Sonuçları (1)
7 - Simülasyon Sonuçları (2)
8 - Ek (Programların kaynak kodları -1)
9 - Ek (Programların kaynak kodları -2)
10 - Kaynakça
Ek (Programların kaynak kodları -2)
Matlab:
function Y=mediancut(I,level);
% Median Cut renk kuantalayici
% I, uint8 grilik seviyesi bir goruntu veya RGB renki bir goruntunun
% tek bir renk katmani.
% level, goruntuyu ifade etmek istediginiz renk sayisi
% Y, kuantalanmis uint8 goruntu
 
I=double(I);
his=zeros(1,256);
for i=1:size(I,1)
    for j=1:size(I,2)
        k=I(i,j);
        his(k+1)=his(k+1)+1;
    end
end
 
y=1;
 
for c=1:256
   
    if his(c)==0
        continue
    end
 
    for x=1:his(c)
        img(y)=c-1;
        y=y+1;
    end
end
 
n=size(img,2);
a=mod(n,level);
s=(n-a)/level;
 
m=1;
if a~=0
    for i=1:a
        for j=1:s+1
            sub(j)=img(m+j-1);
        end
        m=m+s+1;
        maks=max(sub);
        mini=min(sub);
        ort=round(sum(sub)/(s+1));
   
        for z=1:size(I,1)
            for t=1:size(I,2)
                if (I(z,t)<= maks) & (I(z,t)>=mini)
                    I(z,t)=ort;
                end
            end
        end
   
    end
end
 
for i=a+1:level
    for j=1:s
        subb(j)=img(m+j-1);
    end
    m=m+s;
    maks=max(subb);
    mini=min(subb);
    ort=round(sum(subb)/(s));
   
    for z=1:size(I,1)
        for t=1:size(I,2)
            if (I(z,t)<= maks) & (I(z,t)>=mini)
                I(z,t)=ort;
            end
        end
    end
   
end
 
Y=uint8(I);
% end of function

Matlab:
function Y = glevel(I,n)
% Goruntunun grilik seviyesini degistiren M-Fonksiyonu
% Uniform kuantalama
% Degisken tanimlanmasi :
% I   -- Grilik seviyesini degistirmek istedigimiz goruntu. Gorunutuyu
% unsigned 8-bit interger(uint8) sinifi kabul ediyoruz.
% n   -- Goruntunun istenilen grilik seviyesi. 2,4,8,16...128,256 gibi 2'nin
% tam kuvvetleri olmalı.
error(nargchk(2,3,nargin)) % giris parametrelerinin sayisi kontrol ediliyor.
i=int16(log2(n));
chk=double(i);
if ~(n==2^chk)| n==0 | n==1 % n degeri kontrol ediliyor.
      error('Yanlis bir deger girdiniz. Lutfen 2 ile 256 arasında 2 nin tam kuvvetleri olan değerler giriniz');
     else
       
        % Lineer gray-scale renk haritasi oluturuluyor.
        lartis=255/(n-1);
        cmap=zeros(n,1);
        for i=2:n
            cmap(i)=cmap(i-1)+lartis;
        end
        cmap=round(cmap);
       
        of = (n-1)/255% grilik seviyesi olceklendirme faktoru  [0,255]
     
        % goruntu uzerinde lineer kombinasyonlu aritmetik islem yapiliyor.
        % olceklendiriliyor
           
                 X=double(I);
                 Y=of.*X;
                 Y=uint8(Y);
           
        % olceklendirilmis goruntu yeniden intensity goruntuye donusturuluyor.
       
        for i=1:size(Y,1)
            for j=1:size(Y,2)
                Y(i,j)=cmap(Y(i,j)+1);
            end
        end
end
 
% End of function glevel

Matlab:
function [gamma] = psnr(x,y)
% Programin Amaci : 8-bit iki goruntu alir ve tepe isaret gurultu oranini
% hesaplar. x ve y ayni boyutlu 2D dizi veya vektor olmalidir.
% gamma = 10 log (255^2/MSE)
 
x=double(x);
y=double(y);
 
sx = size(x);
sy = size(y);
 
if sx == sy
dd = x(:) - y(:);
gg = (dd' * dd)/prod(sx);
rr = 255^2./gg;
gamma = 10 * log10(rr);
else
fprintf ('
n Goruntulerin boyutlari ayni olmali.');
gamma = NaN;
end
% End of function glevel
 

Matlab:
function Newimg = histe(I)
% Program Adi : Goruntuye Histogram Esitleme uygulayan M-Fonksiyonu
%
% Degisken tanimlanmasi :
% I   -- Histogram esitleme uygulayarak iyileştirmek istedigimiz goruntu.
% Gorunutuyu unsigned 8-bit interger(uint8) sinifi kabul ediyoruz.
error(nargchk(1,2,nargin)) % giris parametrelerinin sayisi kontrol ediliyor.
 
% histogram hesaplaniyor
hist=zeros(1,256);
if isa(I, 'uint8'),     
    I = double(I);
end
for i=1:size(I,1)
    for j=1:size(I,2)
        k=I(i,j);
        hist(k+1)=hist(k+1)+1;
    end
end
 
% toplam histogram hesaplaniyor
sum=0;
for i=0:255
    sum=sum+hist(i+1);
    sum_of_hist(i+1)=sum;
end
 
% giris goruntusu cikis goruntusune donusturulur
area = size(I,1)*size(I,2);
Glevel = 256;
for i=1:size(I,1)
    for j=1:size(I,2)
        k=I(i,j);
        X(i,j)=(Glevel/area)*sum_of_hist(k+1);
    end
end
Newimg=uint8(X);
 
% End of funtion histe
Sayfa: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

 Kullanıcı Yorumları 
Seyhan Agaoglu Tarih: 04 Arl Cum, 2009 18:29    Mesaj konusu [MAKALE] Median Cut ve Huffman Uygulayarak Görüntü Sıkıştırm

Makaleyi Güncelleyen Seyhan Agaoglu
1. sayfa (Toplam 0 sayfa) Sayfa:  
Makale Gezinti Çubuğu 

Bu kategoriye yeni makale gönderemezsiniz
Bu kategorideki makalelerinizi düzenleyemezsiniz
Bu kategorideki makalelerinizi silemezsiniz
Bu makaleye yorum yapamazsınız
Bu kategorideki makaleleri oylayamazsınız
Bu kategorideki makalelerin onaylanması gerekmektedir
Bu kategorideki düzenlenmiş makalelerin onaylanması gerekmektedir