Sunday, May 29, 2016

安全与不安全

Introduction

安全科学是人类生产、生活、生存过程中,避免和控制人为技术、自然因素或人为-自然因素所带来的危险、危害、意外事故和灾害的学问。她以技术风险作为研究对象,通过事故与灾害的避免、控制和减轻损害及损失,达到人类生产、生活和生存的安全。
Fig. 1
国家安全生产监督管理总局(国家煤矿安全监察局)主要职责节选:研究提出安全生产重大方针政策和重要措施的建议;综合监督管理全国安全生产工作;依法行使安全生产综合监督管理职权;负责综合监督管理危险化学品和烟花爆竹安全生产工作。
Fig. 2

References

[2] 国务院办公厅关于印发国家安全生产监督管理总局主要职责内设机构和人员编制规定的通知. 国办发[2005]11号.

Friday, May 20, 2016

Geography: 内蒙古牧区白灾监测及判定

Introduction

雪灾因雪而成,频繁的大雪、暴雪,特别是由此所引起的积雪,是形成白灾的主要因素。冬天,如果降雪过大、积雪过厚,牧草被大雪掩埋,这就是牧业上的“白灾”。白灾主要由雪大而引起,但灾情却不单纯决定于降雪量。积雪厚度和持续时间,牧草的丰欠、牲畜的体质、草场再续状况等都对灾情有重大影响(宫德吉, 2000)。
基于2003~2012年的监测资料,内蒙古最大积雪面积出现在每年的一月份,最小面积是每年的十月份,内蒙古地区积雪面积随时间呈现微减少趋势;初雪日期不断推后,同时终雪日期逐渐提前,积雪持续时间在显著减少;平均雪深表现稍微缓慢减少的趋势(萨楚拉, 2015)。
积雪深度是由降雪量决定的,因此以当地冬季降雪距平百分率和积雪深度为指标,来确定白灾标准,将白灾分为一般白灾、严重白灾、特重白灾三级。一般白灾对畜牧业生产危害不大,采取适当措施可避免灾害损失;严重白灾对畜牧业生产构成一定危害,需采取救助措施,以避免或减少灾害损失;特重白灾对畜牧业生产和人民生命财产构成严重危害,需采取统筹救援措施,以减少灾害损失。另外,还考虑到随着生产结构的调整、抗灾能力的提高、白灾造成的损失相应降低等因素,将白灾标准做了相应调整,具体指标为(刘志刚和王英舜, 2006):
一般白灾:11月至翌年2月降雪距平百分率≥20%或连续两个月降雪距平百分率≥50%,5 cm积雪日数≥30 d。
严重白灾:11月至翌年2月降雪距平百分率≥50%或12月和翌年1月降雪距平百分率≥250%,5cm积雪日数≥90 d。
特重白灾:11月至翌年2月降雪距平百分率≥100%,5cm积雪日数≥90 d。
对于上述白灾判定标准,降雪量可以冬季的降水记录量度(实际观测中,雪融化为水后的降水记录),但对于积雪日数的观测记录还比较缺乏,积雪日数不能作为评估长时间序列积雪深度的有效指标。因此,仅依靠降雪距平百分率判定的白灾等级或有可能与实际情况之间存在出入,尤其是那些常年降雪量较少的地区,一旦遇到稍大的降雪过程,虽不至于形成雪灾,但从降雪距平百分率来看,容易达到白灾划分的等级,所以“5 cm积雪日数”这一标准也是重要的。考虑至此,若在一定地理范围使用依据降雪距平百分率的白灾判定标准,则应慎重考虑“一定地理范围”牧草的高度及温度等方面的空间异质性,若这“一定地理范围”都曾在历史上有过白灾发生记录,不妨按照“像元级”水平计算得出这“一定地理范围”的降雪距平百分率。
降水记录表示降雪量,于是降水距平百分率公式如下:
\[{P_a} = \frac{{P - \overline P }}{{\overline P }} \times 100\% \]
式中:P是观测降水量;Pbar是降水量多年平均值。
降水量多年平均值的计算应避免极端事件的干扰(离群值),因此计算范围选择降水量由低至高在5~95%区间的数值记录,从而得出降水量多年平均值。

References

[1] 宫德吉, 李彰俊. 内蒙古大(暴)雪与白灾的气候学特征[J]. 气象, 2000, 26(12): 24-28.
[2] 萨楚拉. 内蒙古草原牧区雪灾监测与风险评价研究[D]. 呼和浩特: 中国农业科学院草原研究所, 2015.
[3] 刘志刚, 王英舜. 内蒙古锡林郭勒盟牧业气候区划[D]. 北京: 气象出版社, 2006.

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

Thursday, May 5, 2016

Matlab: 众数插值

Introduction

土地利用覆盖分类矩阵也就是土地利用图,年代之间可能对应的空间范围有点点差异,尤其是边界地带可能不一致,这种不一致是指个别年份在这些地带无数据,像元数值是背景值,这给下面的多年分析就带来不便。如Fig. 1,左边是土地利用类型图,有限区域像元数值表示一定的土地类型,研究区之外表示无效区域以数值-99表达,右边是有效研究区范围的无数据地带,在左边以0数值表达。
Fig. 1
这里尝试以这类无数据像元毗邻的众数填充,规定毗邻的范围是八邻域(Fig. 2),八邻域之中频率高者即是该无数据像元的填充数值。个别极端情况下,某无数据像元毗邻八邻域均是无效区域或无数据像元,此时的邻域须向外围扩展一圈(如Fig. 2外围白色的像元),或再扩展一圈,直至可以得到有效的邻域数值为止。
Fig. 2
经此处理过程,土地利用图件的有效区域范围就不存在无数据像元了。

Video: Matlab Call GDAL Functions

Introduction

视频讲解Matlab启动GDAL处理数据的一般原理及过程。

FFmpeg: Concatenate videos

Introduction

FFmpeg连接(组合、合并)多视频文件的操作。
文献[1]示例代码:
1
2
3
4
ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
ffmpeg -i concat:"intermediate1.mpg|intermediate2.mpg" -c copy intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
简述以上处理过程:文件input1.avi和input2.avi先经格式转换至mpg文件,随后这两个mpg文件首尾连接输出一个合并文件,最后将这一合并文件再经格式转换至.avi格式文件。

Example

在Matlab启动FFmpeg实现如上同样的处理流程,代码:
 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
% Created by LI Xu
% Version 1.0
% April 20, 2016

% Description:
% Combine several videos to one

% If you have any question about this code,
% please do not hesitate to contact me via E-mail: 
% jeremy456@163.com

% Blog:
% http://blog.sciencenet.cn/u/lixujeremy
% http://lixuworld.blogspot.com/

clear
clc

% Source Directory
SouDir='input';
% Destination Directory
DesDir='output';
otpath=fullfile(DesDir, 'all.wmv');
% All Input Videos
videos=dir(fullfile(SouDir, '*.wmv'));

% Loop to convert input videos
% to the mpg format

disp('...Start to convert to mpg format...');
for ii=1:length(videos)
    vidname=videos(ii).name;
    [~, filename, ~]=fileparts(vidname);
    vidpath=fullfile(SouDir, vidname);
    % Mpg
    mpgpath=fullfile(SouDir, [filename, '.mpg']);
    ConToMpg(vidpath, mpgpath); 
end
disp('...Finish to convert to mpg format...');

% All mpg Videos
mpgfiles=dir(fullfile(SouDir, '*.mpg'));
% Construct file path string
vidstr=[];
for ii=1:length(mpgfiles)
    mpgname=mpgfiles(ii).name;
    mpgpath=fullfile(SouDir, mpgname);
    if isempty(vidstr)
        vidstr=mpgpath;
    else
        vidstr=[vidstr, '|', mpgpath];
    end
end


disp('...Start to Concatenate...');
% Command
outmpg='temporary.mpg';
cmdstr=['ffmpeg -i concat:"', vidstr, '"'];
cmdstr=[cmdstr, ' -c copy ', outmpg];
[stuat, cmdout]=system(cmdstr);

% Delete all mpg files
DeleteMPG(SouDir, mpgfiles);

% Convert to wmv
ConToWMV(outmpg, otpath);
delete(outmpg);
disp('...Finish to Concatenate...');
disp('Exit');
disp('**************************************************');
注意:合并文件比之输入文件大小之和还大出许多。

References

Tuesday, May 3, 2016

GDAL: Clip Rasters

Introduction

GDAL利用shapefile文件裁剪栅格影像,并配置裁剪边界之外的背景数值。注意shapefile文件与栅格影像具有完全一致的投影信息。

Example

 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
44
45
46
47
48
49
50
% Created by LI Xu
% Version 1.0
% April 19, 2016

% Description:
% Clip rasters from a shapefile boundary

% If you have any question about this code,
% please do not hesitate to contact me via E-mail: 
% jeremy456@163.com

% Blog:
% http://blog.sciencenet.cn/u/lixujeremy
% http://lixuworld.blogspot.com/


clear;
clc;

% Source Directory
SouDir='input';
% Destination Directory
DesDir='output';
% All Input Files
files=dir(fullfile(SouDir, '*.tif'));
% Vector File
vecpath='shapefile.shp';
[~, layername, ~]=fileparts(vecpath);
% Output No Data
NoData=-2;


% Loop
for ii=1:length(files)
    filename=files(ii).name;
    filepath=fullfile(SouDir, filename);
    
    otpath=fullfile(DesDir, filename);
    % gdalwarp -of GTiff -cutline INPUT.shp -cl shapefile  -crop_to_cutline INPUT.tif  OUTPUT.tif
    strcmd=['gdalwarp -of GTiff -cutline ', vecpath, ' -cl ', layername, ' -crop_to_cutline '];
    strcmd=[strcmd, '-dstnodata ' num2str(NoData),' ', filepath, ' ', otpath];
    
    py.os.system(strcmd);
    
    disp([num2str(ii), ':', filename]);
    
end


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

References