MATLAB:从视频中查找最小像素值
MATLAB: Finding minimal pixel values from a video
我正在尝试编写一些 MATLAB 代码,以便给定一个单色视频,它需要生成一个图像,使图像的每个像素都等于该像素在视频中采用的最小值。例如,在整个视频过程中,像素 (200,300) 将等于该像素 (200,300) 的最小值。我已经编写了一些代码来执行此操作,但是效率非常低。任何改进我的代码的评论都将得到应用
hologramVideo = VideoReader('test.mp4')
mkdir('images')
frames = int16(hologramVideo.Duration * hologramVideo.FrameRate)
imageValues = cell(frames, 1);
ii = 1;
while hasFrame(hologramVideo)
imageValues{ii} = im2uint8(rgb2gray(readFrame(hologramVideo)));
ii = ii + 1;
end
newImage = zeros(512)
currentMin = 255
currentVal = 0
x = 1;
y = 1;
for x = 1:512
for y = 1:512
currentMin = 0;
for i = 1:frames
currentImg = imageValues(i,1,1);
currentVal = currentImg{1,1}(x,y)
if currentVal < currentMin;
currentMin = currentVal;
end
end
newImage(x,y) = currentMin;
end
end
我没有要测试的文件,但主要瓶颈在于您如何存储图像。与其将它们存储在元胞数组中,不如将它们存储在 3D 数组中:
imageValues = zeros([Nframes, 512, 512]);
ii=1;
while hasFrame(hologramVideo)
imageValues(ii,:,:) = im2uint8(rgb2gray(readFrame(hologramVideo)));
ii = ii + 1;
end
这将使代码的其余部分变得非常简单和矢量化(即快速):
newImage = squeeze(min(imageValues,[],1));
我正在尝试编写一些 MATLAB 代码,以便给定一个单色视频,它需要生成一个图像,使图像的每个像素都等于该像素在视频中采用的最小值。例如,在整个视频过程中,像素 (200,300) 将等于该像素 (200,300) 的最小值。我已经编写了一些代码来执行此操作,但是效率非常低。任何改进我的代码的评论都将得到应用
hologramVideo = VideoReader('test.mp4')
mkdir('images')
frames = int16(hologramVideo.Duration * hologramVideo.FrameRate)
imageValues = cell(frames, 1);
ii = 1;
while hasFrame(hologramVideo)
imageValues{ii} = im2uint8(rgb2gray(readFrame(hologramVideo)));
ii = ii + 1;
end
newImage = zeros(512)
currentMin = 255
currentVal = 0
x = 1;
y = 1;
for x = 1:512
for y = 1:512
currentMin = 0;
for i = 1:frames
currentImg = imageValues(i,1,1);
currentVal = currentImg{1,1}(x,y)
if currentVal < currentMin;
currentMin = currentVal;
end
end
newImage(x,y) = currentMin;
end
end
我没有要测试的文件,但主要瓶颈在于您如何存储图像。与其将它们存储在元胞数组中,不如将它们存储在 3D 数组中:
imageValues = zeros([Nframes, 512, 512]);
ii=1;
while hasFrame(hologramVideo)
imageValues(ii,:,:) = im2uint8(rgb2gray(readFrame(hologramVideo)));
ii = ii + 1;
end
这将使代码的其余部分变得非常简单和矢量化(即快速):
newImage = squeeze(min(imageValues,[],1));