Korkens Optical Flow sensor

Berätta om dina pågående projekt.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Liten uppdatering.

Nu så har jag bara testat att lägga komponenter på för att se så allt passar och självklart har ett fel smygit sig in.
Min design på linshållaren vart fel så monteringshålen passar inte, detta är fixat och så ska jag beställa nya kort. Men ska se om jag kan limma fast linshållaren så jag kan testa lite.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Så, har testat att limma en linshållare och det va mycket svårt att få bra. :(
Så det blir att beställa nya kort, köra iteadstudio med UPS expressfrakt och hoppas det går fort. Vet att korten brukar bli klara på en vecka men frakten tar en livstid - detta får UPS fixa.
Kinesiska nyåret slutar imorgon så det kanske tar lite tid innan de kommer igång, men har väldigt mycket på jobbet just nu så har lite dåligt med tid så det passar lite. :)
Agwan
Inlägg: 1617
Blev medlem: 15 september 2009, 09:05:14

Re: Korkens Optical Flow sensor

Inlägg av Agwan »

Vad var det som var svårt med limningen?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Det som blev problem va att lim siprade lätt in till kamera sensorn samt att det vart väldigt kinkigt med centrering.
Nåväl, det är inte hela värden just nu.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Nu är de nya korten skickade (för ett par dagar sen med UPS) och borde landa på måndag/tisdag! :D
Agwan
Inlägg: 1617
Blev medlem: 15 september 2009, 09:05:14

Re: Korkens Optical Flow sensor

Inlägg av Agwan »

Spännande. Skall bli intressant att se vad det blir för precision.

Har du kommit en bit med kodningen? Vilka konfigurationsmöjligheter kommer det finnas, hur ställer jag in dem. Hur får jag förflyttningedatat från kortet?
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Korkens Optical Flow sensor

Inlägg av Andax »

Såg att det fanns en kickstarter som kallades pixy. Det är nästan samma hårdvaru-upplägg, fast de klustrade efter färg och kunde tracka föremål. Du kan ju lägga in alternativa algoritmer för att bredda användningsområdet.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Jag såg den kickstartern. :) Skillnaden är att de använder en FPGA och jag kör med en Cortex-M4, annars är de nog ganska lika.
Jag funderade på att köra med en FPGA, men har inte nog med kunskap med dessa för att klara detta tror jag. :humm:
perra_e
Inlägg: 983
Blev medlem: 13 februari 2009, 16:26:53
Ort: Jönköping

Re: Korkens Optical Flow sensor

Inlägg av perra_e »

Enligt deras sida kör dom också Cortex M4 med en LPC4330.

Kod: Markera allt

Technical specs
• Processor: NXP  LPC4330, 204 MHz, dual core 
• Image sensor: Omnivision OV9715, 1/4", 1280x800 
•Lens field-of-view: 75 degrees horizontal, 47 degrees vertical
•Lens type: standard M12 (several different types available)
•Power consumption: 140 mA typical
•Power input: USB input (5V) or unregulated input (6V to 10V)
•RAM: 264K bytes
•Flash: 1M bytes
•Available data outputs: UART serial, SPI, I2C, USB, digital, analog
•Dimensions: 2.1" x 1.75" x 1.4"
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Där ser man! Var 100% säker på att de hade en FPGA.
Men då är de dom gjorde mycket coolare! :tumupp:

Största skillnaden är nog då att jag har en annan kamera sensor, men annars inte så mycket.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Äntligen har de nya kretskorten landat! :D Dock så vart det svart fast att jag beställde blå.
Blir att löda till helgen. :)

Tog med en XT60 kontakt som storleksreferens.
2014-02-25 15.16.52.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Agwan
Inlägg: 1617
Blev medlem: 15 september 2009, 09:05:14

Re: Korkens Optical Flow sensor

Inlägg av Agwan »

Hur går det med det här projektet. Har du någon plan på när de kan vara uppe och köra?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Står tyvärr stilla just nu, lägger all tid på KFly.
Så fort KFly flyger (dvs alla basfunktioner) så ska jag starta upp detta igen. :) Har alla komponenter och PCBer så behöver bara löda ihop det och börja koda!
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Korkens Optical Flow sensor

Inlägg av Korken »

Då kör vi uppdateringen på phase correlation som lovades i KFly tråden! :) Detta är då en helt annat sätt av att göra optic flow som baseras i frekvensplanet.
Jag har bifogat två dokument, en liten förklaring av mig som beskriver hur phase correlation fungerar och ett dokument om en komplett optical flow algoritm.
kflow_v1.pdf
phasecorrelation5.pdf
Exempel - här är två bilder där den ena har skiftats 15 pixlar i x och y led:
pic1_fill.png
pic2_fill.png
Den svarta linjen motsvarar ett dödområde i sensorn.

Efter min algoritm och efter IFFTn så är detta resultatet:
ifft.png
Den vita punkten är i positionen (15, 15) - dvs perfekt matchning.


När det kommer till beräkningskomplexitet så behövs det (om bilden har NxN pixlar) 2*N FFTer samt lika många IFFTer, där max N stycken kan köras i parallell.
Dvs för en 256 x 256 bild så behövs det totalt 512 st 256 punkters FFTer och lika många IFFTer. Så denna algoritm är extremt bra för parallella beräkningar i tex en FPGA!

Här är ett script (bestående av 3 filer) som gör precis detta, men bra för translation. Dvs den tar inte hänsyn till rotation och skalning.
Men den är ganska kul att leka med. :)

Huvudscriptet:

Kod: Markera allt

close all;
clc;
clear all;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  Phase correlation of Images based motion estimation example
%            (uses a webcam to demo the algorithm)
%
%  Note: Only translation, not rotation nor scaling is identified.
%
%  By Emil Fresk, Luleå University of Technology
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Create video input object.
% Follow the steps here to install neccessary software:
% http://www.mathworks.se/help/imaq/basic-image-acquisition-procedure.html

% Work computer webcam:
% vid = videoinput('winvideo',1,'I420_176x144');
% Laptop webcam:
vid = videoinput('winvideo',1,'MJPG_352x288');

vid_size = 256;

% Set video input object properties for this application.
% Note that example uses both SET method and dot notation method.
set(vid,'TriggerRepeat',100);
vid.FrameGrabInterval = 4;

% Set value of a video source object property.
vid_src = getselectedsource(vid);
%set(vid_src,'Tag','motion detection setup');
%set(vid_src,'FrameRate', '20.0000');
%set(vid_src,'ExposureMode', 'manual');

% Create a figure window.
f = figure(1); 

% Start acquiring frames.
start(vid)

% Create local variables
old_fft = zeros(vid_size, vid_size);
x = 0;
y = 0;
first = true;

while (1)
    
    % Wait until a frame is available
    while(vid.FramesAvailable == 0)
    end

    % Get the new image from the webcam
    new_image = getdata(vid,1); 
    
    % Convert the data uint8 -> double
    new_image = double(new_image(1:vid_size, 1:vid_size, 1));
    
    % Calculate the optic flow based on the old fft and the new image
    [of, old_fft, dx, dy] = get_optic_flow(new_image, old_fft, vid_size);
    
    % Minor thing to cancel start up defects
    if first == true
        dx = 0;
        dy = 0;
        first = false;
    end
    
    % Integrate the deltas to get total translation
    x = x + dx;
    y = y - dy;
    
    % Plot the image and correlation in a subplot with results as text
    subplot(1,2,1), imshow(imresize(new_image ./ max(max(new_image)), 3));
    title(['x: ', int2str(x), ', y: ', int2str(y)])
   
    subplot(1,2,2), imshow(imresize(of, 3));
    title(['(dx: ', int2str(dx), ', dy: ', int2str(-dy), ')']);
    
    set(findall(f,'type','text'),'FontSize',30,'fontWeight','bold')    
    drawnow     % update figure window
    
    % Check if 'e' has been pressed, if so exit the loop.
    key = get(f,'CurrentCharacter');
    if (key == 'e')
        fprintf('End of flow.\n')
        break;
    end
end

stop(vid) 


Hjälpfunktioner:

Kod: Markera allt

function [A, new_fft, dx, dy] = get_optic_flow(new_img, old_fft, vid_size)
  D1 = old_fft;
  D2 = fft2(apply_window(new_img));
  
  M = D1.*conj(D2);
  A = abs(ifft2(M ./ abs(M)));
  A = fftshift(A ./ max(max(A)));
  
  [~, I] = max(A(:));
  
  dx = round(I / vid_size) - (vid_size / 2) - 1;
  dy = mod(I, vid_size) - (vid_size / 2) - 1;
  
  new_fft = D2;
end

Kod: Markera allt

function X = apply_window(img)
  % w - Window function, N x 1
  % d - Image N x N
  
  N = length(img);
  m = zeros(N,N); % Initialize space for mask
  
  w = hamming(N);

  % Initialize windows along column direction
  for n=1:N
    m(:,n) = w;
  end

  % Apply windows along rows
  m = m .* m';
  
  X = img .* m;
end
Har ni frågor så släng dom på mig! :D
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av Korken 11 september 2014, 20:32:47, redigerad totalt 1 gång.
Användarvisningsbild
dar303
Inlägg: 5979
Blev medlem: 17 december 2003, 19:54:56
Ort: Sthlm

Re: Korkens Optical Flow sensor

Inlägg av dar303 »

Herregud, jag har saknat EF när jag ägnat mig åt annat i nåt år...trådar som är så långt över ens huvud att man måste googla och läsa en timme för att få baskunskaper! :) Tack!
Skriv svar