@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
この例では,Webカメラからのメジ取得とデタの後処理を並行して実行する方法を示します。
この例では,MATLABクライアントはビデオデバイスからフレームを取得し,後処理を並列ワーカーにオフロードします。これにより,ノズ除去ニュラルネットワクを使用して各フレムからノズが除去されます。その後,フレ,ムがビデオに書き込まれます。
この例では,parfeval
を使用してワ,カ,の後処理を実行し,parallel.pool.Constant
を使用して後処理中に使用するワカのノズ除去ネットワクをンスタンス化します。ワ,カ,からフレ,ムを戻し,フレ,ムが順番に書き込まれるようにするため,この例ではOrderedDataQueue
オブジェクトを使用しています。
デバ@ @スの情報の抽出とビデオ出力の設定
以前のイメージ取得オブジェクトを消去し,現在マシンに接続されているビデオデバイスの情報を抽出します。
对象= imaqfind;删除(对象);imaqreset;deviceInfo = imaqhwinfo(“winvideo”)
deviceInfo =带字段的结构:AdaptorDllName: ' adapter .dll' AdaptorDllVersion: '6.1 (R2019b)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1×1 struct]
出力ビデオのフォルダ,が現在のディレクトリに既に存在するかどうかを確認します。出力ビデオのフォルダ,が存在しない場合は,作成します。
如果~ isfolder (“OutputFolder”mkdir)OutputFolder结束
ビデオのデタを出力フォルダのaviファルに書き込むには,VideoWriter
オブジェクトを作成します。
videoOut = VideoWriter(“OutputFolder / myVideo.avi”);
並列環境の設定
後処理をワ,カ,にオフロ,ドできるようにするには,まず並列プ,ルを起動します。
P = parpool(“本地”);
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数:6)。
parallel.pool.Constant
オブジェクトを作成して,ワーカー内にノイズ除去ネットワークを1回だけ作成し,それを使用してフレームからノイズを除去します。
C = parallel.pool.Constant(@()“dncnn”));
後処理されたフレ,ムをワ,カ,から戻し,順番に書き込むには,OrderedDataQueue
を使用します。afterEach
を使用して,フレ,ムをディスクに書き込むためのコ,ルバックを設定します。
Q = OrderedDataQueue;afterEach (Q, @(帧)writeVideo (videoOut帧));
OrderedDataQueue
オブジェクトはこの例のサポトファルで定義されています。自分のコドで使用する場合は,コピして他のファルとともに配置します。
ビデオ入力オブジェクトの設定
ビデオ入力オブジェクトを作成します。このオブジェクトがクラ▪▪アントでフレ▪▪ムごとに取得を実行するよう設定します。
videoIn = videoinput(“winvideo”, 1“YUY2_800x600”)
使用'Microsoft®LifeCam Cinema(TM)'的视频输入对象摘要。采集源:input1可用。采集参数:'input1'是当前选中的源。使用所选源每个触发器10帧。'YUY2_800x600'视频数据开始时要记录。抓取第一个每1帧(s)。在触发时将数据记录到“内存”。触发参数:启动时1个“立即”触发器。状态:等待启动。启动后获得0帧。 0 frames available for GETDATA.
videoIn。ReturnedColorSpace =“RGB”;videoIn。FramesPerTrigger = Inf;videoIn。FramesAcquiredFcnCount = 1;
ビデオの書き込みフレームレートを,ビデオの読み取りと同じレートに設定し,ビデオ出力オブジェクトを開きます。
src = videoIn.Source;videoOut。FrameRate = str2double(src.FrameRate);打开(videoOut);
各フレ,ムの取得後に後処理操作を開始するには,ビデオ入力オブジェクトのFramesAcquiredFcn
コ,ルバックを定義してから取得を開始します。
videoIn。FramesAcquiredFcn = {@postProcessAndWrite,C,Q};开始(videoIn);
プレビュ,ウィンドウを作成します。图ハンドルhPreviewFig
の等待
を使用して,プレビュ,を手動で閉じるとすぐにビデオを停止することができます。この例では,2秒後にビデオ取得を停止します。
hPreviewImg =预览(videoIn);hPreviewFig =祖宗(hPreviewImg,“图”);暂停(2);停止(videoIn);
後処理関数により,未来変数がビデオオブジェクトの用户数据
プロパティに格納されます。この変数は,ビデオの書き込み操作の将来の実行を表します。すべてのデータを出力ファイルに書き込んだ後にビデオライターを閉じるには,この未来変数で毕竟
を使用します。
postProcessFutures = videoIn.UserData;closeVideoFuture = afterAll(postProcessFutures,@() close(videoOut),0);
この例の後処理操作は数分かかる場合があります。Windows 10,英特尔®3.60 GHz Xeon®w - 2133 CPU、コア数6の環境では,後処理は4分かかりました。
ウエ▪▪トバ▪▪を使用して後処理の進行状況を追跡できます。後処理操作が完了するたびにウエトバを更新するには,afterEach
を使用します。すべての操作が完了した後にウエトバを閉じるには,毕竟
を使用します。詳細については、afterEachと毕竟を使用したユーザーインターフェイスの非同期更新を参照してください。
H = waitbar(0,“后处理…”);updateWaitbarFuture = afterEach(postProcessFutures,...@ (~) waitbar(总和(strcmp (“完成”, {postProcessFutures.State})) /元素个数(postProcessFutures), h), 1);afterAll(closeVideoFuture, @() close(h),0);
未来変数を待機することにより,書き込みが完了するまでクライアントセッションの実行をブロックします。
等待(closeVideoFuture);
完了したらビデオ入力オブジェクトを削除します。
删除(videoIn);
結果の可視化
ビデオファesc escルが作成されたら,結果を可視化することができます。
VideoReader
オブジェクトを使用してビデオファ@ @ルを読み取ります。
vidObj =视频阅读器(“OutputFolder / MyVideo.avi”);
関数readFrame
を使用して,一部のフレ,ムを読み取ります。
图像= cell(1,5);时间= .4:.4:2;为ii = 1:数值(次数)vidObj。CurrentTime = times(ii);images{ii} = readFrame(vidObj);结束
フレ,ムを可視化するには,関数蒙太奇
を使用します。
蒙太奇(图片,“大小”[1 5])
補助関数の定義
メ▪▪ンの後処理ル▪▪ティンを定義します。これはフレ,ム取得のたびに実行されます。この関数postProcessAndWrite
は,デ,タをビデオ入力オブジェクトから取得し,parfeval
を呼び出して,並列ワカでフレムのノズ除去を開始します。
函数postProcessAndWrite(videoIn,~,C,Q) [frame,~,metadata] = getdata(videoIn,1);postProcessFuture = parfeval(@postProcess,0,帧,C,Q,元数据. framenumber);videoIn。用户数据= [videoIn.UserData postProcessFuture];结束
後処理関数をワ,カ,で実行するよう定義します。この例では,計算を単純にするために、各フレームをグレーに変換し、関数denoiseImage
を使用してノ@ @ズを除去します。関数后处理
は,フレ,ムと,parallel.pool.Constant
オブジェクトの价值
フィルドに格納されたノズ除去ネットワクを,入力として使用します。ノ事前学習済みのメジノズ除去ネットワクの取得(图像处理工具箱)を参照してください。
函数postProcess(frame,C,Q,frameNumber) grayFrame = im2double(rgb2gray(frame));denoisedGrayFrame =去噪图像(grayFrame,C.Value);降噪grayframe = im2uint8(降噪grayframe);发送(Q, frameNumber denoisedGrayFrame)结束
参考
parfeval
|parallel.pool.Constant
|imaqfind
(图像采集工具箱)|videoinput
(图像采集工具箱)|FramesAcquiredFcn
(图像采集工具箱)|VideoWriter
|毕竟
|afterEach
|denoiseImage
(图像处理工具箱)
関連する例
詳細
- 图像处理工具箱入門(图像处理工具箱)
- 开始与图像采集工具箱(图像采集工具箱)