Sunday, May 8, 2016

Matlab: Size Suitable to View with Smart Phone

Introduction

智能电话在我们的生活中越来越像是标配了,它方便和简化了日常生活的大部分内容,各种新应用正陆续开拓、延伸沟通的疆界与触角。
智能电话浏览照片常常发觉照片的尺寸不匹配屏幕,上下黑边范围过大,照片被挤压在中间很窄的区域,这样的浏览感受并不舒服。那么,开贴论述【1】多大Size的图片适宜在智能电话当中打开与浏览?【2】以及不同Size的图片怎样才能转换为这类适宜的尺寸?
以我的电话“和M812 C4安卓智能手机”为例,主要参数:5.5英寸屏幕;分辨率为1280×720像素。这里就已经说明1280(H)×720(W)是屏幕的最佳显示尺寸,这就是【1】的答案,这也表明电话屏幕显示比例是为16:9。问题【2】的转换需要借助编程工具,这里使用Matlab软件。
代码处理图片分为2种情况:A原始图片尺寸小于1280(H)×720(W)的情况,图片按照16:9比例进行裁剪,保持H不变,W进行适当的调整,参考函数SmallOne,编辑结果如图1,这张图片在手机中能够充满手机屏幕,不会出现明显的由于图片尺寸不符引起的屏幕空白。
图 1
第2种情况指向H与W都大于标准尺寸,这类图片有两种调整方法,参考函数LargeOne:其一,仍然保持H不变,以标准尺寸提取图片核心部分,返回一张标准尺寸的图片,如图 2;其二,将图片转置H变为W后,按照之前的方法再提取图片的核心部分,如图 3,这种图片适合手机横向情况下浏览图片,效果很好。
图 2
图片人物是克里米亚总检察长Natalia Poklonskaya女士。

第二版

在LargeOne函数添加图片伸缩参数,相应地,主程序调用也有调整。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
% Created by LI Xu
% Version 1.0
% 10 May, 2016

clear;
clc;

% Input Image
inpath='p4.png';

% Check the size of input image
info=imfinfo(inpath);
height=info.Height;
width=info.Width;

stdhgt=1280;
stdwdh=720;

imscale=1;

if height<stdhgt || width<stdwdh
    disp(['This input image size is smaller than the Standard ', ...
        num2str(stdhgt), ' * ', num2str(stdwdh), '.']);
    newimg=SmallOne(inpath, stdhgt./stdwdh, 0.13);
    
else
    disp(['This is a larger one.']);
    newimg=LargeOne(inpath, imscale, [stdhgt, stdwdh], [ .05, .35]);
    
end



otname=strsplit(inpath, '.');
otname=otname{1};
otname=[otname, '_new.png'];
pause(3);
imwrite(newimg, otname);
close all;
  


disp('**************************************************');

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
% Created by LI Xu
% Version 1.0
% 10 May, 2016

function newimg=LargeOne(path, imscale, stdsize, stscale)

    img=imread(path);
    img=imresize(img, imscale);
    [row, col, ~]=size(img);
    
    rowscale=stscale(1);
    colscale=stscale(2);
    
    strow=rowscale*row;
    stcol=colscale*col;
    
    stdow=stdsize(1);
    stdcol=stdsize(2);
    
    newimg=img(strow:strow+stdow-1, stcol:stcol+stdcol-1, :);
    
    imshow(uint8(newimg));

end

References

No comments:

Post a Comment