2015-11-17 1 views
0

Je veux accélérer le traitement d'image en utilisant la détection de cercle de hough.algorithme hough parallèle utilisant omnithread lib

// For all rows in image: 
    for y:=0 to AnalysisBitmap.Height-1 do 
    begin 
    // For all pixel in one row : 
    for x:=0 to AnalysisBitmap.Width-1 do 
    begin 
     // Is there a point ? 
     if IsPixel(x,y, AnalysisBitmap, 128) then 
     begin 
      for theta:=0 to max_theta do 
      begin 
       TestPoint.x := round (x - r * cos(theta*PI/max_theta)); 
       TestPoint.y := round (y - r * sin(theta*PI/max_theta)); 

       if ((testPoint.x < ImageWidth) and (testPoint.x > 0) and 
        (testPoint.y < ImageHeight) and (testPoint.y > 0)) then Inc(aHoughResult[TestPoint.x,TestPoint.y]); 
      end; 
     end; 
    end; 
    end; 

Comme le VCL Bitmap est pas sûre que je suppose que je ne peux que faire du traitement parallèle de la boucle intérieure Theta? Quelle est la meilleure approche pour accélérer ce code.

+1

Avez-vous considéré une bibliothèque de traitement d'image comme OpenCV, si votre préoccupation est pratique? – MBo

+0

oui, nous utilisons également matlab pour le traitement d'image. Cette fois, nous voulons utiliser notre propre algorithme avec DELPHI – user1769184

+0

D'accord avec @MBo - à moins que ce soit un exercice académique, pourquoi réinventer la roue? Si les performances importent, je sauterais probablement le multithreading et irais directement sur [[gpu :: HoughCircles]] d'OpenCV (http://docs.opencv.org/2.4/modules/gpu/doc/image_processing.html#gpu-houghcircles). –

Répondre

0

Oui, il suffit de paralléliser le cycle interne uniquement. Ne pas oublier d'organiser le partage droit de aHoughResult, par exemple - avec la section critique.

Dans les versions les plus récentes de Delphi, vous pouvez utiliser à la fois OTL et les possibilités System.Threading.TParallel intégrées.

L'accélération la plus importante (je pense) - remplir le tableau avec les valeurs round(r*cos(theta*PI/max_theta)) et l'utiliser dans les cycles.

+0

puis-je obtenir quelques conseils pour partager le tableau aHoughResult – user1769184

+0

De la façon la plus simple - le verrouiller avec la section critique. – MBo