% this function shift the Cframe
function[Sframe]=SHIFT(Cframe,P)
% P:the polarity of Cframe
%%%%%%%%%%%%%% For test %%%%%%%%%%%%%%%%
%Cframe=imread('ed009.ras');
%Cframe=double(Cframe);
%Cframe=odd(Cframe);
%P=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ROW,COL]=size(Cframe);
refframe=zeros([2*ROW,COL]);
if P
refframe(1:2:2*ROW-1,:)=Cframe(1:ROW,:);
else
refframe(2:2:2*ROW,:)=Cframe(1:ROW,:) ;
end
if P
for r=2:2:2*ROW-2
for c=2:COL-1
% caculate direction correlation
d1=abs(refframe(r-1,c-1)-refframe(r-1,c+1))+abs(refframe(r+1,c-1)-refframe(r+1,c+1));
d2=abs(refframe(r-1,c-1)-refframe(r+1,c-1))+abs(refframe(r-1,c+1)-refframe(r+1,c+1));
d3=abs(refframe(r-1,c)-refframe(r+1,c-1))+abs(refframe(r-1,c+1)-refframe(r+1,c));
d4=abs(refframe(r-1,c-1)-refframe(r+1,c))+abs(refframe(r-1,c)-refframe(r+1,c+1));
S=min([d1,d2,d3,d4]);
% interpolate on the most correlative direction
switch S
case d1
g=(max([min([refframe(r-1,c-1),refframe(r-1,c),refframe(r-1,c+1)]),min([refframe(r+1,c-1),refframe(r+1,c),refframe(r+1,c+1)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c-1),refframe(r-1,c),refframe(r-1,c+1)]),max([refframe(r+1,c-1),refframe(r+1,c),refframe(r+1,c+1)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2;
case d2
g=(max([min([refframe(r-1,c-1),refframe(r-1,c),refframe(r+1,c-1)]),min([refframe(r-1,c+1),refframe(r+1,c),refframe(r+1,c+1)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c-1),refframe(r-1,c),refframe(r+1,c-1)]),max([refframe(r-1,c+1),refframe(r+1,c),refframe(r+1,c+1)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2;
case d3
g=(max([min([refframe(r-1,c),refframe(r+1,c-1)]),min([refframe(r-1,c+1),refframe(r+1,c)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c),refframe(r+1,c-1)]),max([refframe(r-1,c+1),refframe(r+1,c)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2 ;
case d4
g=(max([min([refframe(r-1,c-1),refframe(r+1,c)]),min([refframe(r-1,c),refframe(r+1,c+1)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c-1),refframe(r+1,c)]),max([refframe(r-1,c),refframe(r+1,c+1)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2;
otherwise
default
end
refframe(r,c)=g;
end
end
for r=2:2:2*ROW-2
refframe(r,1)=(refframe(r-1,1)+refframe(r+1,1))/2;
refframe(r,COL)=(refframe(r-1,COL)+refframe(r+1,COL))/2;
end
refframe(2*ROW,:)=Cframe(ROW,:);
% shift to even field
Sframe(1:ROW,:)=refframe(2:2:2*ROW,:);
else
for r=3:2:2*ROW-1
for c=2:COL-1
% caculate direction correlation
d1=abs(refframe(r-1,c-1)-refframe(r-1,c+1))+abs(refframe(r+1,c-1)-refframe(r+1,c+1));
d2=abs(refframe(r-1,c-1)-refframe(r+1,c-1))+abs(refframe(r-1,c+1)-refframe(r+1,c+1));
d3=abs(refframe(r-1,c)-refframe(r+1,c-1))+abs(refframe(r-1,c+1)-refframe(r+1,c));
d4=abs(refframe(r-1,c-1)-refframe(r+1,c))+abs(refframe(r-1,c)-refframe(r+1,c+1));
S=min([d1,d2,d3,d4]);
% interpolate in the most correlative direction
switch S
case d1
g=(max([min([refframe(r-1,c-1),refframe(r-1,c),refframe(r-1,c+1)]),min([refframe(r+1,c-1),refframe(r+1,c),refframe(r+1,c+1)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c-1),refframe(r-1,c),refframe(r-1,c+1)]),max([refframe(r+1,c-1),refframe(r+1,c),refframe(r+1,c+1)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2;
case d2
g=(max([min([refframe(r-1,c-1),refframe(r-1,c),refframe(r+1,c-1)]),min([refframe(r-1,c+1),refframe(r+1,c),refframe(r+1,c+1)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c-1),refframe(r-1,c),refframe(r+1,c-1)]),max([refframe(r-1,c+1),refframe(r+1,c),refframe(r+1,c+1)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2;
case d3
g=(max([min([refframe(r-1,c),refframe(r+1,c-1)]),min([refframe(r-1,c+1),refframe(r+1,c)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c),refframe(r+1,c-1)]),max([refframe(r-1,c+1),refframe(r+1,c)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2 ;
case d4
g=(max([min([refframe(r-1,c-1),refframe(r+1,c)]),min([refframe(r-1,c),refframe(r+1,c+1)]),min([refframe(r-1,c),refframe(r+1,c)])])+...
min([max([refframe(r-1,c-1),refframe(r+1,c)]),max([refframe(r-1,c),refframe(r+1,c+1)]),max([refframe(r-1,c),refframe(r+1,c)])]))/2;
otherwise
default
end
refframe(r,c)=g;
end
end
for r=3:2:2*ROW-1
refframe(r,1)=(refframe(r-1,1)+refframe(r+1,1))/2;
refframe(r,COL)=(refframe(r-1,COL)+refframe(r+1,COL))/2;
end
refframe(1,:)=Cframe(1,:);
% shift to odd field
Sframe(1:ROW,:)=refframe(1:2:2*ROW-1,:);
end
%%%%%%%%%%%%%% For test %%%%%%%%%%%%%%%%
%figure;
%imshow(uint8(Cframe));
%title('Cframe')
%figure;
%imshow(uint8(Sframe));
%title('Sframe')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
评论0