1. 程式人生 > >圖示識別光流Optical Flow

圖示識別光流Optical Flow

對於光流法的介紹,如下部落格先看如下部落格,瞭解概念

Lucas–Kanade光流演算法介紹:http://www.cnblogs.com/gnuhpc/archive/2012/12/04/2802124.html

將連結2中的例項和連線點選開啟連結結合,改寫成視訊跟蹤的程式,可生成光流彩色圖、視訊

完整MATLAB程式如下:

主程式:

clc
clear
close all
% 讀取檔案物件
mp4_name='Mp4\sub01\sub01_01.mp4';
videoReader = vision.VideoFileReader(mp4_name,'ImageColorSpace','Intensity','VideoOutputDataType','uint8');
% 型別轉化物件
converter = vision.ImageDataTypeConverter;
% 光流物件
opticalFlow = vision.OpticalFlow('ReferenceFrameDelay', 1);
opticalFlow.OutputValue = 'Horizontal and vertical components in complex form';
if 0 % 使用的演算法
opticalFlow.Method = 'Lucas-Kanade';
opticalFlow.NoiseReductionThreshold = 0.001; % 預設是0.0039
else
opticalFlow.Method = 'Horn-Schunck';
opticalFlow.Smoothness = 0.5; % 預設是1
end
% 顯示物件
frame = step(videoReader);
figure
subplot(121)
himg = imshow(frame);
subplot(122)
hof = imshow(frame);

%用於在影象中繪製標記;
hsi=vision.ShapeInserter('Shape','Lines','BorderColor','Custom',...
 'CustomBorderColor',255);

%用於播放視訊影象的系統物件;
hvp = vision.VideoPlayer ('Name','Motion Vector');

% 開始播放
ii=1;
while ~isDone(videoReader)
% 得到一幀
frame = step(videoReader);
% 格式轉化
im = step(converter, frame);
% 計算光流
of = step(opticalFlow, im);
%產生座標點
lines=videooptflowlines(of,20); 
   if ~ isempty(lines)
   out = step(hsi,im,lines); %標記出光流
   step(hvp,out);%觀看檢測效果
   end

% 光流圖轉化
ofI = computeColor(real(of), imag(of));
path=strcat('opticalFlow_img\sub01\01\',num2str(ii),'.jpg');
imwrite(ofI,path);
ii=ii+1;
% figure, imshow(ofI);
% 顯示
set(himg, 'cdata', frame)
set(hof, 'cdata', ofI)
drawnow
end
release(videoReader);
release(hvp);

其中,computerColor()函式如下:

function img = computeColor(u,v)

%   computeColor color codes flow field U, V

%   According to the c++ source code of Daniel Scharstein 
%   Contact: [email protected]

%   Author: Deqing Sun, Department of Computer Science, Brown University
%   Contact: [email protected]
% $Date: 2007-10-31 21:20:30 (Wed, 31 Oct 2006) $ % Copyright 2007, Deqing Sun. % % All Rights Reserved % % Permission to use, copy, modify, and distribute this software and its % documentation for any purpose other than its incorporation into a % commercial product is hereby granted without fee, provided that the % above copyright notice appear in all copies and that both that % copyright notice and this permission notice appear in supporting % documentation, and that the name of the author and Brown University not be used in % advertising or publicity pertaining to distribution of the software % without specific, written prior permission. % % THE AUTHOR AND BROWN UNIVERSITY DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, % INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY % PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR OR BROWN UNIVERSITY BE LIABLE FOR % ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. nanIdx = isnan(u) | isnan(v); u(nanIdx) = 0; v(nanIdx) = 0; colorwheel = makeColorwheel(); ncols = size(colorwheel, 1); rad = sqrt(u.^2+v.^2); a = atan2(-v, -u)/pi; fk = (a+1) /2 * (ncols-1) + 1; % -1~1 maped to 1~ncols k0 = floor(fk); % 1, 2, ..., ncols k1 = k0+1; k1(k1==ncols+1) = 1; f = fk - k0; for i = 1:size(colorwheel,2) tmp = colorwheel(:,i); col0 = tmp(k0)/255; col1 = tmp(k1)/255; col = (1-f).*col0 + f.*col1; idx = rad <= 1; col(idx) = 1-rad(idx).*(1-col(idx)); % increase saturation with radius col(~idx) = col(~idx)*0.75; % out of range img(:,:, i) = uint8(floor(255*col.*(1-nanIdx))); end; %% function colorwheel = makeColorwheel() % color encoding scheme % adapted from the color circle idea described at % http://members.shaw.ca/quadibloc/other/colint.htm RY = 15; YG = 6; GC = 4; CB = 11; BM = 13; MR = 6; ncols = RY + YG + GC + CB + BM + MR; colorwheel = zeros(ncols, 3); % r g b col = 0; %RY colorwheel(1:RY, 1) = 255; colorwheel(1:RY, 2) = floor(255*(0:RY-1)/RY)'; col = col+RY; %YG colorwheel(col+(1:YG), 1) = 255 - floor(255*(0:YG-1)/YG)'; colorwheel(col+(1:YG), 2) = 255; col = col+YG; %GC colorwheel(col+(1:GC), 2) = 255; colorwheel(col+(1:GC), 3) = floor(255*(0:GC-1)/GC)'; col = col+GC; %CB colorwheel(col+(1:CB), 2) = 255 - floor(255*(0:CB-1)/CB)'; colorwheel(col+(1:CB), 3) = 255; col = col+CB; %BM colorwheel(col+(1:BM), 3) = 255; colorwheel(col+(1:BM), 1) = floor(255*(0:BM-1)/BM)'; col = col+BM; %MR colorwheel(col+(1:MR), 3) = 255 - floor(255*(0:MR-1)/MR)'; colorwheel(col+(1:MR), 1) = 255;

相關推薦

圖示識別Optical Flow

對於光流法的介紹,如下部落格先看如下部落格,瞭解概念 Lucas–Kanade光流演算法介紹:http://www.cnblogs.com/gnuhpc/archive/2012/12/04/2802124.html 將連結2中的例項和連線點選開啟連結結合,改寫成視訊跟

什麼是Optical Flow

無人機上經常提到的光流法定位是什麼? 作為無人機愛好者一枚,經常關注比如大疆(DJI)、零度智控、PARRET的人都會看到他們提及的光流定位、室內懸停等的宣傳標語,那麼今天我們就來一起探討下它。 光流定義 光流通俗理解 光流法分析 參見

OpenCV (Optical Flow)

// Farneback dense optical flow calculate and show in Munsell system of colors // Author : Zouxy // Date : 2013-3-15 // HomePage : htt

optical flow介紹

            光流是空間運動物體在觀測成像面上的畫素運動的瞬時速度。光流的研究是利用影象序列中的畫素強度資料的時域變化和相關性來確定各自畫素位置的“運動”,即研究影象灰度在時間上的變化與景象中物體結構及其運動的關係。將二維影象平面特定座標點上的灰度瞬時變化率定

opencvOptical Flow

光流Optical Flow 現在四軸飛行器越來越火,如何在室內進行定位呢?不同於傳統四軸的姿態控制,電機驅動,室外定位,都有了一套完整的方案,室內定位還是沒有完全成熟。,目前大四軸可以利用的GPS定高,小四軸比較成熟的也就是光流方案了。先看一下光流的效果這是一個揮動的手

(Optical Flow)--未完待續

光流 (Optical Flow) 物體在運動的時候,它在影象上對應畫素點也在做相應的運動,這種影象畫素的表觀運動就是光流,即空間運動物體在觀察成像平面上的畫素運動的瞬時速度。 當人的眼睛觀察運動物體時,物體的景象在人眼的視網膜上形成一系列連續變化的影象,

法(Optical Flow)及OpenCV實現

Optical Flow Optical flow 有兩個假設: 亮度恆定:在相鄰連續兩幀中一個目標的畫素強度不會變化。 空間一致性:周圍畫素有類似執行。 時間規律:相鄰幀時間足夠短,以至於在考慮執行變化時可以忽略它們之間的差異。 假設在第一幀中畫素

法 學習--optical flow

學習背景: 為了更好地去理解Sift_flow的提出背景,廢話不多說,步入正題。 《學習openCV》一書,把它放在第10章跟蹤與運動,想必定和跟蹤問題有關了,腦子裡可以大概過一下跟蹤方面的問題,,自己過吧,略。 http://blog.csdn.net/carson200

CNN計算--FlowNet: Learning Optical Flow with Convolutional Networks

本文使用CNN網路來計算光流,實現端對端訓練,自己製作了個訓練資料庫 Flying Chairs Network Architectures 因為最後的結果需要得到畫素級別的,所以需要對CNN網路得到卷積特徵圖進行方法 光流計算的輸入是一個影象

極簡optical flow

實在時間緊,還是僅上英文版的,諸位見諒。原文在我的個人主頁上。 Simple optical flow based on depth and pose information Recently, I was helping to implement a simpl

optical flow

概念 光流是Gibson在1950年首先提出的,它是指空間運動物體在觀察成像平面上的畫素運動瞬時速度。是利用影象序列中畫素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的相應關係。一般而言,光流是因為場景中前景目標本身的移動、相機的運動

幾分鐘走進神奇的|FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks

故事背景 那是15年的春天,本文的作者和其他幾個人,使用CNN做光流估計,於是FlowNet成了第一個用CNN做光流的模型,當時的結果還不足以和傳統結果相匹配。2016年冬天,作者和一群小夥伴又基於Flow Net的工作進行了改進,效果得到了提升

【論文筆記】在視訊行為識別中的作用

0. 引言 在做視訊行為識別時,特別是基於two-stream框架時,常常會引入光流圖作為雙流網路其中一支的輸入。這是很常用,且在各資料集上已被證明有效的做法。但是,關於光流在行為識別中到底起到了什麼作用其實並沒有明確的研究。通常我們認為光流代表了視訊的m

【圖像處理】openCV法追蹤運動物體

num blank ndis water 不同 h+ width 相關性 ida openCV光流法追蹤運動物體 email:[email protected]/* */ 一、光流簡單介紹 摘自:zouxy09 光流的概念是G

P3128 [USACO15DEC]最大Max Flow

sub 帶來 輸出 integer new 中間 end port eas 題目描述 Farmer John has installed a new system of N-1N?1 pipes to transport milk between the NN stalls

[USACO15DEC]最大Max Flow

als ems names lag tarjan space sizeof root 時間復雜度 題目:洛谷P3128。 題目大意:一棵n個點的樹,每次將兩個節點最短路徑所覆蓋的所有節點的流量加1。問你最後流量最大的節點的流量是多少。 解題思路:裸的樹上差分。 對於每

洛谷 P3128 [USACO15DEC]最大Max Flow

eterm poi adg 帶來 orange pri 線段 next argv 題目描述 Farmer John has installed a new system of N-1N?1 pipes to transport milk between the NN sta

網絡Flow Networks)

上傳 term and 限制 包括 傳遞 forms idt 得到 一.基本術語 Basic Terminology   A source node in a directed graph is a node with no incoming edges. 入度為0   A

洛谷——P2936 [USACO09JAN]全Total Flow

space 輸入 存在 maximum separate total you () turn 題目描述 Farmer John always wants his cows to have enough water and thus has made a map of th

luoguP3128 [USACO15DEC]最大Max Flow 題解(樹上差分)

gist ref dep efi != ace head turn gis 鏈接一下題目:luoguP3128 [USACO15DEC]最大流Max Flow(樹上差分板子題) 如果沒有學過樹上差分,摳這裏(其實很簡單的,真的):樹上差分總結 學了樹上差分,這道題就極其顯然