matlab中scale,Scale功能的Matlab实现

1. Scale功能的Matlab实现

1.1. Scale概念

VGA显卡内部有一个Scale的IC,以至于能实现各种分辨率的模式的显示。不过底层的的LCD肯定分辨率是唯一的,比如1920*1080。输入小图像的时候,通过Scale功能,来适应LCD的输出。

现在有一种算法:超分辨率(Super-Resolution),即通过硬件或软件的方法提高原有图像的分辨率,通过一系列低分辨率的图像来得到一幅高分辨率的图像过程就是超分辨率重建。超分辨率重建的核心思想就是用时间带宽(获取同一场景的多帧图像序列)换取空间分辨率,实现时间分辨率向空间分辨率的转换。

当然,我做的没有这么高级,目前做的只是最简单的缩放功能,而且只测试了放!直接将1920*1200的图像放大了2倍。

1.2. Scale算法的实现

1.2.1. 算法实现流程

实现流程如下:

(1)读取衣服固定分辨率的IMG1

(2)分配2倍行列的内存IMG2

(3)进程1

a) 直接将原来图像的数值分配到IMG2的偶数行,偶数列中

b) 填充偶数行的奇数列像素

i. 第一个像素直接镜像赋值第二个像素

ii. 随后每一个奇像素=(前一个偶数像素+后一个偶数像素)/2

(4)进程2

a) 第一行直接镜像赋值第二行

b) 随后的每一行像素=(上一行对应像素+下一行对应像素)/2

1.2.2. Matlab代码

% -----------------------------------------------------------------------

% 映射每个偶数行偶数列的像素,并且填充偶数行奇数列的像素

% 均为偶数行,行地址相同

for i = 1 : h       %行

for j = 1 : w   %列

% 映射每个偶数行偶数列的像素

IMG2(2*i,2*j,1) = IMG1(i,j,1);

IMG2(2*i,2*j,2) = IMG1(i,j,2);

IMG2(2*i,2*j,3) = IMG1(i,j,3);

%填充奇数行奇数列的像素

if(j == 1)  %列地址为1,即第一个像素,直接镜像赋值

IMG2(2*i,2*j-1,1) = IMG1(i,j,1);

IMG2(2*i,2*j-1,2) = IMG1(i,j,2);

IMG2(2*i,2*j-1,3) = IMG1(i,j,3);

else        %列地址位2,3,4...w,通过求均值得到

IMG2(2*i,2*j-1,1) = (IMG1(i,j-1,1) + IMG1(i,j,1))/2;

IMG2(2*i,2*j-1,2) = (IMG1(i,j-1,2) + IMG1(i,j,2))/2;

IMG2(2*i,2*j-1,3) = (IMG1(i,j-1,3) + IMG1(i,j,3))/2;

end

end

end

% -----------------------------------------------------------------------

% 填充奇数行的每一个像素,通过两个偶数行求平均得到

% 均为奇数数行,行地址相同

for i = 1 : h       %行

for j = 1 : w   %列

if(i == 1)  %行地址位1,即第一行,直接镜像赋值

IMG2(2*i-1,2*j-1,1) = IMG2(2*i,2*j-1,1);    %上述填充的值

IMG2(2*i-1,2*j-1,2) = IMG2(2*i,2*j-1,2);

IMG2(2*i-1,2*j-1,3) = IMG2(2*i,2*j-1,3);

IMG2(2*i-1,2*j,1)   = IMG2(2*i,2*j,1);      %上述直接赋值的值

IMG2(2*i-1,2*j,2)   = IMG2(2*i,2*j,2);

IMG2(2*i-1,2*j,3)   = IMG2(2*i,2*j,3);

else        %列地址位2,3,4...w,通过求均值得到

IMG2(2*i-1,2*j-1,1) = (IMG2(2*(i-1),2*j-1,1)+IMG2(2*i,2*j-1,1))/2;

IMG2(2*i-1,2*j-1,2) = (IMG2(2*(i-1),2*j-1,2)+IMG2(2*i,2*j-1,2))/2;

IMG2(2*i-1,2*j-1,3) = (IMG2(2*(i-1),2*j-1,3)+IMG2(2*i,2*j-1,3))/2;

IMG2(2*i-1,2*j,1)   = (IMG2(2*(i-1),2*j,1)+IMG2(2*i,2*j,1))/2;

IMG2(2*i-1,2*j,2)   = (IMG2(2*(i-1),2*j,2)+IMG2(2*i,2*j,2))/2;

IMG2(2*i-1,2*j,3)   = (IMG2(2*(i-1),2*j,3)+IMG2(2*i,2*j,3))/2;

end

end

end

1.2.3. 效果图

你可能感兴趣的:(matlab中scale)