
function [D,X,sublist,sub_list] = dominantpass(X,threshold,sublist,sub_list) 
% 
% Funkcija za racunanje dominantnog prolaza
% 
% Autori  : Davor Zivko i Dario Zrno
% Projekt : Kompresija slike EZW algoritmom
% Kolegij : Napredne metode digitalne obrade signala, sk.god. 2004/05
% 
% function [D,X,sublist,sub_list] = dominantpass(X,threshold,sublist,sub_list) 
%
% Ulazi funkcije:
%         X................... matrica koeficijenata
%         threshold........... trenutna vrijednost praga
%         sublist............. matrica znacajnih koeficijenata
%         sub_list............ pozicije znacajnih koeficijenata
% 
% Izlazi funkcije:
%         D................... matrica izlaznih simbola
%         X................... matrica koeficijenata 
%         sublist............. matrica znacajnih koeficijenata
%         sub_list............ pozicije znacajnih koeficijenata
% 

D=[];

global N;

% X je matrica koeficijenata, velicine m*n
[m,n]=size(X);

% referencijska matrica
R=zeros(m);

[a,b]=size(N);

% koeficijent X(1,1) je DC komponenta!
if abs(X(1,1))>=threshold 
    sublist=[sublist, abs(X(1,1))];
    sub_list=[sub_list;N(1,1),N(1,2)];
    if X(1,1)>0;
        D=[D,'p']; 
    else D=[D,'n'];
    end
    X(1,1)=0;
else D=[D,'z'];
end

% provjera potomaka prvog elementa 
for k=2:4,
    if abs(X(N(k,1),N(k,2)))>=threshold, 
        sublist=[sublist, abs(X(N(k,1),N(k,2)))]; 
        sub_list=[sub_list;N(k,1),N(k,2)];
        if X(N(k,1),N(k,2))>0 
            D=[D,'p'];
        else D=[D,'n'];
        end
        X(N(k,1),N(k,2))=0;
        % Znacajni koeficijent se zamjenjuje sa nulom u originalnoj slici  
    else
        % Provjera potomaka za 2,3,4
        result = checkdescendants1( k,X,threshold,0); 
        if result==1
            D=[D,'z'];
        else
            D=[D,'t'];
            R(N(k,1),N(k,2))=1;   
            R=checkchildren(k,R);
        end
    end
end

% provjera ostalih elemenata 
for k=5:a,
    if abs(X(N(k,1),N(k,2)))>=threshold,
        % zapisi vrijednost znacajnog koeficijenta!
        sublist=[sublist, abs(X(N(k,1),N(k,2)))]; 
        % zapisi njegovu poziciju u matrici
        sub_list=[sub_list;N(k,1),N(k,2)];
        if X(N(k,1),N(k,2))>0, 
            D=[D,'p']; 
        else D=[D,'n'];
        end
        % na mjesto znacajnog koeficijenta upisi nulu
        X(N(k,1),N(k,2))=0;
        % ako se nije ni p ni n, a u R je zapisana 0 sto znaci da nije bilo
        % provjere tog koeficijenta u prethodnim koracima
    elseif R(N(k,1),N(k,2))==0
        % provjera potomaka
        result = checkdescendants1( k,X,threshold,0); 
        
        if result==1,
            % radi se o izoliranoj nuli
            D=[D,'z'];
            % radi se o nul-stablu
        else D=[D,'t'];
            % zapisi 1 u referencijsku matricu za buduce provjere da znas da
            % je vec provjeravan
            R(N(k,1),N(k,2))=1;  
            R=checkchildren(k,R);          
        end
    end
end
