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

OpenCV Discussion :

Conversion Matlab Opencv


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Conversion Matlab Opencv
    Bonjour, Je cherche à faire une implémentation OpenCV en C++ similaire à ce code ci-dessous sur Matlab, pouvez vous m'aider à faire cette conversion..
    Il s'agit de la dérivée gaussienne:
    Code matlab : 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
    function [H]= gDer(img,sigma, iorder,jorder)
     
    %Initialize the filter
    break_off_sigma = 3.;
    filtersize = floor(break_off_sigma*sigma+0.5);
    img=fill_border(img,filtersize);
    x=-filtersize:1:filtersize;
    Gauss=1/(sqrt(2 * pi) * sigma)* exp((x.^2)/(-2 * sigma * sigma) );
     
    switch(iorder)
    case 0
        Gx= Gauss/sum(Gauss);
    case 1
        Gx  =  -(x/sigma^2).*Gauss;
        Gx  =  Gx./(sum(sum(x.*Gx)));
    end
     
    H = filter2(Gx,img);
     
    switch(jorder)
    case 0
        Gy= Gauss/sum(Gauss);
    case 1
        Gy  =  -(x/sigma^2).*Gauss;
        Gy  =  Gy./(sum(sum(x.*Gy)));
    end
     
    H = filter2(Gy',H);
    H=H(filtersize+1:size(H,1)-filtersize,filtersize+1:size(H,2)-filtersize);

    Merci d'avance

  2. #2
    Membre régulier Avatar de azassma
    Femme Profil pro
    Ph.D - Computer Vision
    Inscrit en
    Avril 2012
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ph.D - Computer Vision
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 159
    Points : 118
    Points
    118
    Par défaut
    Essayez d'écrire un petit code en C++ et là où vous avez des problèmes on va vous aidez
    C'est à nous de rendre la Science amie de la Terre !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Bonjour;
    Merci azassma
    J'ai essayé de convertir la fonction "gDer" écrite sur Matlab (voir le code ci-dessus )en langage c++ (openCV sur Visual studio): mais , lors de l exécution il m'affiche cet erreur:
    Unhandled exception at 0x7537812f in EdgeDetection_ST1.exe: Microsoft C++ exception: cv::Exception at memory location 0x0036f6a4..


    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
    78
    79
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "opencv2/core/core.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/features2d/features2d.hpp"
     
    using namespace cv;
    using namespace std;
     
    void  gDer(cv::Mat src, cv::Mat dst, int sigma, int iorder, int jorder) 
    {
        int kernelSize = floor(3*sigma + 0.5);
        cv::Mat Gauss;
        cv::Mat dGauss;
        cv::Mat Gauss_x;
        cv::Mat Gauss_y;
        cv::Mat S1;
     
        for( int x = -kernelSize;x<=kernelSize;++x )
        {  
            float coef= (-x*x)/(2 * sigma * sigma);
            Gauss = 1/(sigma*(sqrt(2 * CV_PI)) * sigma)* exp(coef);
            dGauss = (-x/sigma^2) / (1/(sigma*(sqrt(2 * CV_PI)) * sigma)* exp(coef));
            S1= x*dGauss;
        }
     
        switch( iorder )
        { 
        case 0:
            divide(Gauss,cv::sum(Gauss),Gauss_x );
            break;
        case 1:
            divide(dGauss,sum(sum(S1)),Gauss_x );
            break; 
        } // end of switch
     
        switch( jorder )
        { 
        case 0:
            divide(Gauss,cv::sum(Gauss),Gauss_y );
            break;
        case 1:
            divide(dGauss,sum(sum(S1)),Gauss_y );
            break;
        } // end of switch
     
        cv::transpose(Gauss_y, Gauss_y);
        dst = src.clone();
        cv::sepFilter2D (src, dst, -1, Gauss_x, Gauss_y, cv::Point (-1, -1), 0);
    }
     
    int main( int argc, char** argv )
    {
        if( argc != 2 ) {
            std::cerr << "Usage: " << argv[0] << " <InputImage>" << std::endl;
            return EXIT_FAILURE;
        }
        cv::Mat image = cv::imread( argv[1], 1);
        if(!image.data) {
            return EXIT_FAILURE;
        }
     
        cv::vector<cv::Mat> color (3);
        cv::split (image, color);
     
        cv::Mat Rx=color[2].clone();
        gDer(color[2],Rx,1, 0, 1);
     
        cv::imshow( "Display Image", image );
     
        cv::imshow ("Rx.png", Rx);
     
        cv::waitKey(0);
        return EXIT_SUCCESS;
     
    }
    J'ai besoin de votre aide et merci d'avance..

Discussions similaires

  1. Erreur UTF8 dans la conversion MATLAB - Scilab
    Par nicollivier dans le forum Scilab
    Réponses: 2
    Dernier message: 26/02/2010, 10h06
  2. [COMPILER] Conversion MATLAB vers C++
    Par milach dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/05/2008, 11h47
  3. [Compiler] Conversion Matlab C++ builder
    Par nadjib2007 dans le forum MATLAB
    Réponses: 5
    Dernier message: 22/07/2007, 14h02
  4. [improfile] Conversion MATLAB -> C
    Par fakhirov dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/10/2006, 15h35
  5. Conversion matlab / java
    Par coolgeff dans le forum MATLAB
    Réponses: 6
    Dernier message: 26/06/2006, 17h44

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