Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中高效地找到所有像素颜色相同的视频帧?_Matlab_Image Processing_Video_Video Processing_Pixels - Fatal编程技术网

如何在MATLAB中高效地找到所有像素颜色相同的视频帧?

如何在MATLAB中高效地找到所有像素颜色相同的视频帧?,matlab,image-processing,video,video-processing,pixels,Matlab,Image Processing,Video,Video Processing,Pixels,MATLAB中读取视频文件的有效方法是什么(意味着使用更少的循环和更短的运行时间),例如:vid1.wmv,使用此规范(长度:5分钟,帧宽:640,帧高:480,帧速率:30帧/秒),并提取所有像素具有相同颜色(例如:黑色)且具有容差的帧的时间戳。 下面是我的代码,非常耗时。每帧大约需要三分钟 clear close all clc videoObject = VideoReader('vid1.wmv'); numFrames = get(videoObject, 'NumberOfFram

MATLAB中读取视频文件的有效方法是什么(意味着使用更少的循环和更短的运行时间),例如:vid1.wmv,使用此规范(长度:5分钟,帧宽:640,帧高:480,帧速率:30帧/秒),并提取所有像素具有相同颜色(例如:黑色)且具有容差的帧的时间戳。 下面是我的代码,非常耗时。每帧大约需要三分钟

clear
close all
clc

videoObject = VideoReader('vid1.wmv');
numFrames = get(videoObject, 'NumberOfFrames');
all_same_color_frame=[];
for i=1:numFrames
    frame = read(videoObject,i); % reading the 10th frame
    W = get(videoObject, 'Width');
    H = get(videoObject, 'Height');
    q=1;
    for j=1:H
        for k=1:W
            rgb(q).pixl(i).frm = impixel(frame,j,k);
            q=q+1;
        end
    end
    Q=1;
    for x=1:q-1
        if std(rgb(x).pixl(i).frm)==0 % strict criterion on standard deviation
            Q=Q+1;
        end
    end
    if Q>0.9*q % if more than 90 percent of all frames had the same color
        all_same_color_frame = [all_same_color_frame i];
    end
end

提前感谢

因为没有依赖关系,所以您可以并行化循环帧


现在还不清楚您要做什么,但您应该尝试计算每帧(2D)的标准偏差(或任何度量),而不是每次将值收集到一个向量中,因为这样做效率不高。

您可以为循环并行化帧,因为没有依赖关系

videoObject = VideoReader('vid1.wmv');
b=[];t=[];
i=1;
while hasFrame(videoObject)
    a = readFrame(videoObject);
    b(i) = std2(a); % standard deviation for each image frame
    t(i) = get(videoObject, 'CurrentTime'); % time stamps of the frames for visual inspection
    i=i+1;
end
plot(t,b) % visual inspection
现在还不清楚您要做什么,但是您应该尝试计算每帧(2D)的标准偏差(或任何度量),而不是每次都将值收集到向量中,因为这样做效率不高

videoObject = VideoReader('vid1.wmv');
b=[];t=[];
i=1;
while hasFrame(videoObject)
    a = readFrame(videoObject);
    b(i) = std2(a); % standard deviation for each image frame
    t(i) = get(videoObject, 'CurrentTime'); % time stamps of the frames for visual inspection
    i=i+1;
end
plot(t,b) % visual inspection
上面是我的解决方案,它使用标准偏差来检测几乎所有像素颜色相同的帧


以上是我的解决方案,它使用标准偏差来检测几乎所有像素都是同一颜色的帧。

你们是在问如何有效地找到它们还是仅仅是如何找到它们?您当前的代码或方法是什么样子的?什么是“高效”?什么是“最简单的”?如果没有适当的上下文,这些话什么也说不出来。我添加了我的解决方案,但它太慢了@HoriaComan我用我的code@Piglet我编辑了我的问题你是在问如何有效地找到它们还是仅仅是如何找到它们?您当前的代码或方法是什么样子的?什么是“高效”?什么是“最简单的”?如果没有适当的上下文,这些话什么也说不出来。我添加了我的解决方案,但它太慢了@HoriaComan我用我的code@Piglet我编辑了我的问题