Zielverfolgungsalgorithmus in der dynamischen Hintergrundzielverfolgung

1. Problembeschreibung:

 Zielverfolgungsalgorithmus in der dynamischen Hintergrundzielverfolgung

2. Teil des Programms:

 

% Programmierung von ALireza Fasih
% E-Mail: [email protected]%
Bitte kopieren Sie die Bilder (* .ppm) in das Arbeitsverzeichnis und drücken Sie F5, um die Ergebnisse anzuzeigen.

clc; % klarer Konsul
alles klar; % lösche alle Variablen

% Ball Threshold Min & Max Werte
th_min_ball = 80;
th_max_ball = 214;

% Anzahl der Frams
Frams = 88;

% Ball Pos initialize
old_ball_pos_x = 0;
old_ball_pos_y = 0;
Ball_speed_list (2,10) = 0;
ball_vel_x = 0;
ball_vel_y = 0;

delta_x = 25;
delta_y = 25;


Zähler = 0;
für i = 21: frams
 fname = strcat ('stennis.', int2str (i), '. ppm'); % Incrimental String Variable für die Indizierung des Dateinamens

 
 wenn (i <35)
  delta_x = 35;
  delta_y = 35;
 sonst
  delta_x = 25;
  delta_y = 25;     
 ende
 
 wenn (i> 80)
  delta_x = 30;
  delta_y = 15;
 Ende
 
 
 k = imread (fname); % Bild in 'k' Matrix 
 laden k1 = k;
 if (old_ball_pos_x ~ = 0)
   k1 = imcrop (k, [round (old_ball_pos_x-delta_x) round (old_ball_pos_y-delta_y) delta_x. * 2 delta_y. * 2]);
 Ende
 
 I = rgb2gray (k1); % Konvertieren von RGB-
 Bildern in Graustufenbilder I = im2double (I); % Konvertieren von Graustufenbildern in Doppeltyp

  J = medfilt2 (I, [3 3]); %
 Medianfilter , 3x3 Faltung auf Bild  I2 = imadjust (J); % Verbessern Sie die Bildqualität und
 passen Sie die Kontrast- und Helligkeitswerte an. Ib = I2> 0,8627; % (220/255); % Binärschwelle für Ball
 

 [markiert, numObjects] = bwlabel (Ib, 4); % Indizierung von Segmenten nach binärer Beschriftungsfunktion
 graindata = regionprops (beschriftet, 'all'); % extrahiert Eigenschaften aus Regionen, 'all' bedeutet, dass alle Attribute
 angezeigt werden müssen (i); % Showzyklus

  % ---------------------- Ball Area, Filter --------------- 
  a_f = find ([graindata.Area ]> th_min_ball & [graindata.Area] <th_max_ball); % Weil die Ballfläche im Bereich von 80 und 211 liegt  
  c1 = Länge (a_f);
  % ---------------------- Ball W / H-Verhältnis, Filter --------------- 
  sel = 1; % Standardwert
  für j = 1: c1   
    
    Ma = Graindaten (a_f (j)). MajorAxisLength;
    Mi = graindata (a_f (j)). MinorAxisLength;
    ratio_w_h = Ma./Mi;
    
     if (ratio_w_h <1,7)% Ball- oder Halbkreisverhältnisbereich = Verhältnis> 0,6 & Verhältnis <1,7  
        sel = a_f (j);
     Ende
  Ende
  

 imshow (k); % k
 festhalten;
 
 set (findobj (gca, 'Typ', 'Linie', 'Farbe', [0 0 1]), ...
    'Farbe', 'Blau', ...
    'Linienbreite', 3)

 %
 Zeichenpunkt auf Ball Center c1 = graindata (sel) .Centroid;

 pos_list (1, i + 1) = c1 (1);
 pos_list (2, i + 1) = 240-c1 (2);
 Plot (c1 (1) + old_ball_pos_x-delta_x, c1 (2) + old_ball_pos_y-delta_y, 'rx');
 
 für tt = 0: 0,05: (2 * pi)
  Diagramm (c1 (1) + old_ball_pos_x-delta_x + 40 * cos (tt), c1 (2) + old_ball_pos_y-delta_y + 40 * sin (tt), 'g') ;;
 Ende
 

  wenn (i> 0)
    ball_vel_x = (old_ball_pos_x - c1 (1)) ./ 24; % 24 Frame in der zweiten Geschwindigkeit = Änderung der Position in der Delta-Zeit    
    ball_vel_y = (old_ball_pos_y - c1 (2)) ./ 24;
  end
    
  Ball_speed_list (1, i + 1) = ball_vel_x;
  Ball_speed_list (2, i + 1) = ball_vel_y;


 if (Zähler> 0)
  old_ball_pos_x = old_ball_pos_x-delta_x + c1 (1);
  old_ball_pos_y = old_ball_pos_y-delta_y + c1 (2);  
 sonst
  old_ball_pos_x = c1 (1);
  old_ball_pos_y = c1 (2);       
 End -
 Zähler = Zähler + 1;
 
 Pause (0,1);
 
Ende            


 

3. Simulationsschlussfolgerung:

Ich denke du magst

Origin blog.csdn.net/ccsss22/article/details/115175902
Empfohlen
Rangfolge