Function algebriques pour calcul sur image

Contenu du snippet

Liste de functions . Toutes les derivees,premiere,seconde,directionnel et calcul de gradient
pour faire du filtrage,lissage,debruitage d'images (tikonof ...) etc. J'ai codé les functions expliquees
dans le tuto traitement d'image de VBFrance.
S'il ya des erreurs faites m'en part. Je passe un tablo en reference c'est une copie de l'image depart.
A plus.

Source / Exemple :


' fonction graphique pour VB6  (calcul sur les fonctions)  ref: debruitage*pdf a VBFrance / Tuto

'derivee premiere au point (x,y)  Dx 
Public Function dX(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Tmp = (1 / 2) * (pax(x + 1, y) - pax(x - 1, y))
  dX = Tmp
  
End Function

'derivee premiere au point (x,y)  Dy
Public Function dY(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Tmp = (1 / 2) * (pax(x, y + 1) - pax(x, y - 1))
  dY = Tmp
  
End Function

'norme gradient
Public Function Ngradien(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Tmp = Sqr((dX(x, y, pax) ^ 2) + (dY(x, y, pax) ^ 2))
  
  Ngradien = Tmp
  
End Function

'derivee seconde dxx
Public Function Dxx(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Tmp = pax(x + 1, y) - (2 * pax(x, y)) + pax(x - 1, y)
  Dxx = Tmp
  
End Function

'derivee seconde dyy
Public Function Dyy(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Tmp = pax(x, y + 1) - (2 * pax(x, y)) + pax(x, y - 1)
  Dyy = Tmp
  
End Function

'derivee seconde x,y
Public Function Dxy(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Tmp = (1 / 4) * (pax(x + 1, y + 1) - pax(x + 1, y - 1) - pax(x - 1, y + 1) + pax(x - 1, y - 1))
  
  Dxy = Tmp
  
End Function

'derivee directonielle
'attention gerer le gradient nul ds les calculs
'sinon boulette.
'si normgrad= 0 alors suite:

Public Function Dnn(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Dnn = 1 / (Ngradien(x, y, pax) ^ 2) * ((dX(x, y, pax) * Dxx(x, y, pax) + 2 * (dX(x, y, pax) * dY(x, y, pax) * Dxy(x, y, pax)) + (dY(x, y, pax) ^ 2) * Dyy(x, y, pax)))
  
End Function

Public Function Dntnt(x As Double, y As Double, ByRef pax() As Double) As Double

  Dim Tmp As Double
  
  Dntnt = 1 / (Ngradien(x, y, pax) ^ 2) * ((dX(x, y, pax) * Dxx(x, y, pax) - 2 * (dX(x, y, pax) * dY(x, y, pax) * Dxy(x, y, pax)) + (dY(x, y, pax) ^ 2) * Dyy(x, y, pax)))
  
End Function

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.