資源簡介
本代碼使用多相位插值法實現圖像縮放,實際上在4 x 4領域大小內進行多相位插值和三次插值幾乎是一樣的,只是對應插值函數值略微不同。多相位插值法是通過對輸出點對應原圖中的領域進行Lanczos2 函數移相插值來產生輸出點的。
代碼片段和文件信息
%Polyphase?scaler算法(該算法采用Lanczos2算法)
%Taps_H=4
%Taps_V=4
%Phase_H=4
%Phase_V=4
clear?all;
A?=?imread(‘test_edge3.bmp‘);
A?=?double(A);
A?=?rgb2yuv(A);
imgA?=?uint8(A);
%?interpolation?scaler?
Hm?=?640;
Hd?=?3840;
Vm?=?480;
Vd?=?2160;
[mn]?=?size(A(::1));????%get?the?length?and?width
A(::1)?=?A(::1);
for?j=1:n
????if(mod(j2)==0)
????????A(:j2)?=?A(:j-12);
????????A(:j3)?=?A(:j-13);
????else
????????A(:j2)?=?A(:j2);
????????A(:j3)?=?A(:j3);
????end
end
k?=?m*Vd/Vm;
l?=?n*Hd/Hm;
w33?=?[-1/8?-1/8?-1/8;
???????-1/8????1?-1/8;
???????-1/8?-1/8?-1/8];
B?=?zeros(34);??????????????%horizotal?interpolation
C?=?zeros(kl3);
%%%%%%%%%%%%????????????????xilinx?v_scaler.pdf??????????%%%%%%%%%%%%%%%%%%%%%%%%
%%?Subsample?a?Sinc?function?and?create?2D?array
%num_h_taps?=?4;
%num_v_taps?=?4;?
%num_taps???=?4;
%num_phases?=?8;
%coef_width?=?16;
%x=-(num_taps/2):1/num_phases:((num_taps/2)-1/num_phases);
%COE_y=2*(sin(pi*x).*sin(pi*x/2))./(pi^2*x.^2);
%coefs_2d=reshape(sinc(x)?num_phases?num_taps)
format?long
%?Normalize?each?phase?individually
%for?i=1:num_phases
%???sum_phase?=?sum(coefs_2d(i:));
%???for?j=1:num_taps???
%??????norm_phases(i?j)?=?coefs_2d(i?j)/sum_phase;
%???end
%???%?Check?-?Normalized?values?should?sum?to?1?in?each?phase
%???norm_sum_phase?=?sum(norm_phases(i:))
%end
%%?Translate?real?to?integer?values?with?precision?defined?by?coef_width
%int_phases?=?round(((2^(coef_width-2))*norm_phases))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for?j?=?1?:?l
Hi?=?j*Hm/Hd;
??xHi?=?double(uint16(Hi));%整數部分
??u?=?Hi?-?xHi;????????????%小數部分
%??u?=?floor(j*Hm./Hd);??????%取余運算
??for?i=?1?:?k
????Vi?=?i*Vm/Vd;
????xVi?=?double(uint16(Vi));%整數部分
????v?=?Vi?-?xVi;????????????%小數部分
%????v?=?floor(i*Vm./Vd);??????%取余運算
????
????if(?(uint16(xHi)??1)?&?(uint16(xVi)?>?1))
???? src44?=?[A(uint16(xVi-1)uint16(xHi-1)1)?A(uint16(xVi-1)uint16(xHi??)1)?A(uint16(xVi-1)uint16(xHi+1)1)?A(uint16(xVi-1)uint16(xHi+2)1);
???? ?????????A(uint16(xVi??)uint16(xHi-1)1)?A(uint16(xVi??)uint16(xHi??)1)?A(uint16(xVi??)uint16(xHi+1)1)?A(uint16(xVi??)uint16(xHi+2)1);
???? ?????????A(uint16(xVi+1)uint16(xHi-1)1)?A(uint16(xVi+1)uint16(xHi??)1)?A(uint16(xVi+1)uint16(xHi+1)1)?A(uint16(xVi+1)uint16(xHi+2)1);
???? ?????????A(uint16(xVi+2)uint16(xHi-1)1)?A(uint16(xVi+2)uint16(xHi??)1)?A(uint16(xVi+2)uint16(xHi+1)1)?A(uint16(xVi+2)uint16(xHi+2)1);];
???? src_u?=?[A(uint16(xVi-1)uint16(xHi-1)2)?A(uint16(xVi-1)uint16(xHi??)2)?A(uint16(xVi-1)uint16(xHi+1)2)?A(uint16(xVi-1)uint16(xHi+2)2);
???? ?????????A(uint16(xVi??)uint16(xHi-1)2)?A(uint16(xVi??)uint16(xHi??)2)?A(uint16(xVi??)uint16(xHi+1)2)?A(uint16(xVi??)uint16(xHi+2)2);
???? ?????????A(uint16(xVi+1)uint16(xHi-1)2)?A(uint16(xVi+1)uint16(xHi??)2)?A(uint16(xVi+1)uint
評論
共有 條評論