《基于视频的电熔镁炉工况识别系统→1.数据准备(data_prepare)》
整个项目参考代码是研究生毕业项目→
DTBox-0.5.zip
描述 | 代码 |
---|
- 将视频00283切割为时长为5s,帧率为10帧/秒的724个视频 参考见百度网盘→赵磊的文集→项目→镁炉可视化系统(研究生毕业)→效果好00283.mp4
视频00283的参数
|
Video Properties:
Width: 1920
Height: 1080
FrameRate: 25
Duration: 1449s
|
原视频帧数 | 新视频帧数 |
---|
1449×25=36225 | 724*50=36200 |
图像切割
| video_cut.m input:效果好00283.mp4 output:video_segment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
% cut a 10s video from the original video
clear ; close all; clc
video_name = 'g:\炉口火焰数据库制作\MP4\效果好00283.mp4';
video_len = 5;
frameRate = 10;
v = VideoReader(video_name);
for i = 1:floor(v.Duration*v.FrameRate / (video_len*frameRate) )
vcut_name = ['.\video_segment\00283\',num2str(i),'_00283'];
vcut = VideoWriter(vcut_name,'MPEG-4');
vcut.FrameRate = frameRate;
open(vcut);
temp = frameRate*video_len;
for j = (i-1)*temp+1:i*temp
I = read(v,j);
% Img=I(200:470,350:1100,:); % (for 00279)
% Img=I(200:470,350:1100,:); % (for 00282)
Img=I(200:470,400:1450,:); % (for 00283) 271*1051
writeVideo(vcut,Img);
end
close(vcut);
fprintf(['the ',num2str(i),' is generated!\n']);
end
|
|
- 制作furnace_patches_724.mat 424M
- size=1*724
- 将724个视频数据保存到该mat文件中
灰度化
图像缩放
| furnace_patches_724_create.m input:video_segment中的724个视频 output:furnace_patches_724.mat 724个视频图像序列数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
clear ; close all; clc
%% create furnace_patches_724
video_num = 724;
imgdb = cell(1,video_num);
addpath(genpath('.'));
for j = 1:video_num
dir = '.\video_segment\00283\';
v = VideoReader([dir,num2str(j),'_00283.mp4']);
len = v.FrameRate*v.Duration;
pictu_matri = zeros(floor(v.Height/4),floor(v.Width/4),len,'uint8');
for k = 1:len
pictu_matri(:,:,k) = imresize(rgb2gray(read(v,k)),[floor(v.Height/4),floor(v.Width/4)]);
end
imgdb{j} = pictu_matri;
end
save('.\furnace_patches_724.mat','imgdb');
|
|
- 生成724*724 dist矩阵
- 使用calculateMetricLDS 参考见基于视频的电熔镁炉工况识别系统→4.基于子空间角度的核函数→2.四种距离
|
|
- 对724个数据进行聚类
| dist_analysis.m input:724*724dist矩阵 output:聚好类的数据X Y num(每一类的个数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
clear ; close all; clc
%% dist analysis
name = '.\distMatrix\_n=20_nv=1_724_martin.mat';
load(name);
limit_number = 25;%25:3类
[dist_sort,dist_sort_index] = sort(dist,2);
result = dist_sort_index(1,1:limit_number);
for i = 2:724
if intersect(result(:,2:limit_number),dist_sort_index(i,2:limit_number))
continue;
else
result = [result;dist_sort_index(i,1:limit_number)];
end
end
result2 = result';
num=size(result',1);
X=result2(:);
Y=[zeros(num,1);ones(num,1);ones(num,1)+1];
data=[X,Y];
save('.\cluster_result\data25X3_martin.mat','num','data')
|
|