matlab 图像upscaler的lanczos2程序

因为要做fpga的图像upscaler,所以先搞了个matlab的程序验证,想了几天,看了点matlab的书,总算写了个可以用的

clear
clc
Inial_H = 800;Inial_V = 480;
Scaled_H = 1280; Scaled_V = 720;
A=imread('480p_in3.bmp');
[row col dem] = size(A);
red     = A(:,:,1);
green   = A(:,:,2);
blue    = A(:,:,3);
B = zeros(Scaled_V,Scaled_H,3,'uint16');
% Vscale linear interpolation
TmpAV = zeros(Scaled_V,Inial_H,3,'uint16'); %tmp after vscale
for dem_i=1:3
    for row_j=1:2:Inial_V
        for col_k=1:Inial_H
            Tmp_r = row_j+(row_j+1)/2-1;
            TmpAV(Tmp_r,col_k,dem_i) = A(row_j,col_k,dem_i);
            TmpAV(Tmp_r+1,col_k,dem_i) = A(row_j,col_k,dem_i)/3  + A(row_j+1,col_k,dem_i)/3*2;           
            if (row_j==Inial_V-1)
                TmpAV(Tmp_r+2,col_k,dem_i) = A(row_j + 1,col_k,dem_i);
            else
                TmpAV(Tmp_r+2,col_k,dem_i) = A(row_j + 1,col_k,dem_i)/3*2+ A(row_j + 2,col_k,dem_i)/3;
            end
        end
    end
end
o = TmpAV(:,:,1);
p = TmpAV(:,:,2);
q = TmpAV(:,:,3);

OutImg = zeros(Scaled_V,Scaled_H,3,'uint16');
Coe_x = 0:1/8:2;
Coe_x1 = [-fliplr(Coe_x),Coe_x(2:length(Coe_x))];
COE_y=2*(sin(pi*Coe_x).*sin(pi*Coe_x/2))./(pi^2*Coe_x.^2);
COE_y=[1,COE_y(2:length(COE_y))];
COE_y = [fliplr(COE_y),COE_y(2:length(COE_y))];
%COE_y=int16(y*2^12);  %%for integer
Coe=COE_y;
%H scaler use lanczos2
for i=1:3
    for j=1:Scaled_V      
       up_A= upsample(TmpAV(j,:,i),8);
       [B,bn]=conv_m(up_A,[0:6399],Coe,[-16:16]);
       C = B(17:6416);
       OutImg(j,:,i) = downsample(C,5);
    end
end
z=TmpAV(:,:,i);
w=OutImg(:,:,i);
%display Image
imshow(A,'InitialMagnification',100);
title('Inial Image');
figure
imshow(uint8(TmpAV),'InitialMagnification',100);
title('tmp after vscale');
imwrite(uint8(TmpAV),'TmpAV.bmp','bmp');
figure
imshow(uint8(OutImg),'InitialMagnification',100);
title('Out Image');
imwrite(uint8(OutImg),'OutImg.bmp','bmp');
B=imread('720p_out1.bmp');
figure
imshow(B,'InitialMagnification',100);
title('Fpga Scaled Image');

posted on 2011-07-29 15:24  蓝色之耀  阅读(1014)  评论(0编辑  收藏  举报

导航