IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

implémentation de la fonction conv2 de matlab en C


Sujet :

C

Vue hybride

magol1 implémentation de la fonction... 26/04/2012, 13h04
Bousk La formule à implémenter est... 26/04/2012, 13h08
magol1 oui je connais la formule... 26/04/2012, 14h10
gulain Deux boucles for, une... 26/04/2012, 15h27
Bousk Je m'en doutais. ;)... 26/04/2012, 15h34
magol1 Voici le code que j'ai réussi... 27/04/2012, 09h45
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut implémentation de la fonction conv2 de matlab en C
    Bjr!
    je cherche à traduire l'algorithme de la fonction conv2 de matlab en C mais le problème c'est que je comprend pas trop la formule à implémenter.
    Qu'elqu'un pourrait il m'aider?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    La formule à implémenter est la suivante:


    src: http://www.mathworks.fr/help/techdoc/ref/conv2.html
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    oui je connais la formule mais le problème c'est que j'arrive pas à la coder!

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Par défaut
    Deux boucles for, une multiplication et une somme ?

    Il faut « juste » réfléchir aux intervalles sur lesquels varient k1 et k2 (parce que l'infini, c'est trop long).

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par magol1
    je comprend pas trop la formule à implémenter
    Citation Envoyé par magol1 Voir le message
    oui je connais la formule mais le problème c'est que j'arrive pas à la coder!
    Je m'en doutais.
    Seulement voilà la vocation du forum est rarement de réaliser l'exercice des étudiants, mais de les aider à y parvenir.
    L'aide implique que c'est toi qui démarres et demandes un coup de main sur des points pas clairs ou dont tu ne comprends pas le fonctionnement.

    Et puis, ta camarade de promo(?) semble avoir bien avancé..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    Voici le code que j'ai réussi à faire sauf qu'il y a une erreur que je comprend pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <stddef.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "convolution.h"
     
    #define true 1
    #define false 0
    typedef int bool;
     
    bool convolve2D(double* in, double* out, int signalSizeX, int signalSizeY, 
                    double* kernel, int kernelSizeX, int kernelSizeY)
    {
        int i, j, m, n;
        double *inPtr, *inPtr2, *outPtr, *kPtr;
        int kCenterX, kCenterY;
        int rowMin, rowMax;                             // to check boundary of input array
        int colMin, colMax;                             //
     
        // check validity of params
        if(!in || !out || !kernel) 
          return false;
        if(signalSizeX <= 0 || kernelSizeX <= 0) 
          return false;
     
        // find center position of kernel (half of kernel size)
        kCenterX = kernelSizeX >> 1;
        kCenterY = kernelSizeY >> 1;
     
        // init working  pointers
        inPtr = inPtr2 = &in[signalSizeX * kCenterY + kCenterX];  // note that  it is shifted (kCenterX, kCenterY),
        outPtr = out;
        kPtr = kernel;
     
        // start convolution
        for(i= 0; i < signalSizeY; ++i)                   // number of rows
        {
            // compute the range of convolution, the current row of kernel should be between these
            rowMax = i + kCenterY;
            rowMin = i - signalSizeY + kCenterY;
     
            for(j = 0; j < signalSizeX; ++j)              // number of columns
            {
                // compute the range of convolution, the current column of kernel should be between these
                colMax = j + kCenterX;
                colMin = j - signalSizeX + kCenterX;
     
                *outPtr = 0;                            // set to 0 before accumulate
     
                // flip the kernel and traverse all the kernel values
                // multiply each kernel value with underlying input data
                for(m = 0; m < kernelSizeY; ++m)        // kernel rows
                {
                    // check if the index is out of bound of input array
                    if(m <= rowMax && m > rowMin)
                    {
                        for(n = 0; n < kernelSizeX; ++n)
                        {
                            // check the boundary of array
                            if(n <= colMax && n > colMin)
                                *outPtr += *(inPtr - n) * *kPtr;
                            ++kPtr;                     // next kernel
                        }
                    }
                    else
                        kPtr += kernelSizeX;            // out of bound, move to next row of kernel
     
                    inPtr -= signalSizeX;                 // move input data 1 raw up
                }
     
                kPtr = kernel;                          // reset kernel to (0,0)
                inPtr = ++inPtr2;                       // next input
                ++outPtr;                               // next output
            }
        }
        return true;
    }

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    ci dessous le programme .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef CONVOLUTION_H
    #define CONVOLUTION_H
     
    bool convolve2D(double* in, double* out, int sizeX, int sizeY, double* kernel, int kSizeX, int kSizeY);
     
    #endif

Discussions similaires

  1. fonction conv2 de matlab?
    Par AYDIWALID dans le forum Images
    Réponses: 3
    Dernier message: 01/02/2011, 13h23
  2. Réponses: 1
    Dernier message: 19/05/2007, 11h03
  3. Réponses: 2
    Dernier message: 04/05/2007, 15h10
  4. Fonction dsolve dans MATLAB 7.3
    Par mutwit dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/04/2007, 11h35
  5. Réponses: 4
    Dernier message: 01/03/2007, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo