Rowan-Classes/5th-Semester-Fall-2023/Signals-and-Systems/Labs/Final-Project/findfeatures.m
2024-02-22 14:23:12 -05:00

107 lines
2.8 KiB
Matlab

function [result] = findfeatures(filename,dctlength)
%--------------------------------------------------------------------
%
% function [result] = findfeatures(filename,dctlength)
% filename: example 's1.pgm'
% dctlength: length of desired dct
% example: [result]=findfeatures('s1.pgm',35);
%
%--------------------------------------------------------------------
% Read image
[ingresso]=imread(filename);
Lout = dctlength;
% Do zig-zag scanning
[dimx,dimy] = size(ingresso);
dimprod = dimx*dimy;
zigzag = zeros(dimx,dimy);
ii = 1;
jj = 1;
zigzag(ii,jj) = 1;
slittox = 0;
slittoy = 1;
last = 0;
cont = 2;
while cont<dimprod
if slittox == 1 && (ii+1)<=dimx
ii = ii+1;
jj = jj;
zigzag(ii,jj)=cont;
cont = cont+1;
slittox = 0;
last = 1;
continue;
end
if slittox == 1 && (ii+1)>dimx && (jj+1<=dimy)
ii = ii;
jj = jj+1;
zigzag(ii,jj)=cont;
cont = cont+1;
slittox = 0;
last = 1;
continue;
end
if slittoy == 1 && (jj+1)<=dimy
ii = ii;
jj = jj+1;
zigzag(ii,jj)=cont;
cont = cont+1;
slittoy = 0;
last = 0;
continue;
end
if slittoy == 1 && (jj+1)>dimy && (ii+1<=dimx)
ii = ii+1;
jj = jj;
zigzag(ii,jj)=cont;
cont = cont+1;
slittoy = 0;
last = 0;
continue;
end
if (slittox == 0 && slittoy == 0) && last == 1
if ii-1>=1 && jj+1<=dimy
ii=ii-1;
jj=jj+1;
zigzag(ii,jj)=cont;
cont = cont+1;
continue;
else
slittox = 0;
slittoy = 1;
continue;
end
end
if (slittox == 0 && slittoy == 0) && last == 0
if ii+1<=dimx && jj-1>=1
ii=ii+1;
jj=jj-1;
zigzag(ii,jj)=cont;
cont = cont+1;
continue;
else
slittox = 1;
slittoy = 0;
continue;
end
end
end
zigzag(dimx,dimy)=dimprod;
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
t = dct2(ingresso);
vettore_t = t(:);
vettore_t_zigzag = zeros(size(vettore_t));
vettore_zigzag = zigzag(:);
for ii=1:length(vettore_t)
vettore_t_zigzag(vettore_zigzag(ii)) = vettore_t(ii);
end
result = vettore_t_zigzag(2:Lout+1);
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------