Korkens Optical Flow sensor
Re: Korkens Optical Flow sensor
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.
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.
Re: Korkens Optical Flow sensor
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.

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.

Re: Korkens Optical Flow sensor
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.
Nåväl, det är inte hela värden just nu.
Re: Korkens Optical Flow sensor
Nu är de nya korten skickade (för ett par dagar sen med UPS) och borde landa på måndag/tisdag! 

Re: Korkens Optical Flow sensor
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?
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?
Re: Korkens Optical Flow sensor
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.
Re: Korkens Optical Flow sensor
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.

Jag funderade på att köra med en FPGA, men har inte nog med kunskap med dessa för att klara detta tror jag.

Re: Korkens Optical Flow sensor
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"
Re: Korkens Optical Flow sensor
Där ser man! Var 100% säker på att de hade en FPGA.
Men då är de dom gjorde mycket coolare!
Största skillnaden är nog då att jag har en annan kamera sensor, men annars inte så mycket.
Men då är de dom gjorde mycket coolare!

Största skillnaden är nog då att jag har en annan kamera sensor, men annars inte så mycket.
Re: Korkens Optical Flow sensor
Äntligen har de nya kretskorten landat!
Dock så vart det svart fast att jag beställde blå.
Blir att löda till helgen.
Tog med en XT60 kontakt som storleksreferens.

Blir att löda till helgen.

Tog med en XT60 kontakt som storleksreferens.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Korkens Optical Flow sensor
Hur går det med det här projektet. Har du någon plan på när de kan vara uppe och köra?
Re: Korkens Optical Flow sensor
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!
Så fort KFly flyger (dvs alla basfunktioner) så ska jag starta upp detta igen.

Re: Korkens Optical Flow sensor
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. Exempel - här är två bilder där den ena har skiftats 15 pixlar i x och y led: Den svarta linjen motsvarar ett dödområde i sensorn.
Efter min algoritm och efter IFFTn så är detta resultatet: 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:
Hjälpfunktioner:
Har ni frågor så släng dom på mig! 

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. Exempel - här är två bilder där den ena har skiftats 15 pixlar i x och y led: Den svarta linjen motsvarar ett dödområde i sensorn.
Efter min algoritm och efter IFFTn så är detta resultatet: 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

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.
Re: Korkens Optical Flow sensor
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!
