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 :

Dev de Plugin OsiriX


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 163
    Points : 50
    Points
    50
    Par défaut Dev de Plugin OsiriX
    Salut à tous,

    Je débute ce topic en introduisant que je ne suis pas programmeur ni même informaticien, que je maitrise assez bien MatLab, mais que le C++ est encore assez obscure pour moi.

    Je travaille dans le domaine de l'imagerie médicale et je souhaiterai développer un plugin pour le logiciel gratuit Osirix. Il ne fonctionne que sur Mac, du coup je programme sous Xcode en objectiv-C, mais a priori je pourrai tout aussi bien programmer en C++ puisque, si je comprends bien, la compilation aboutirait au même résultat.

    L'object de mon travail est d'arriver à programmer un plugin capable de travailler sur des images en 4 dimensions. Globalement, tous les outils d'affichage sont déja inclus dans Osirix, il ne me "reste" donc plus qu'à apprendre à gérer les données dynamiques, ce que je fais depuis longtemps sur MatLab.

    Osirix est relativement bien fait puisqu'il propose un générateur de plugin, qui crée les fichier .h et .m, je n'ai plus qu'a écrire le coeur du code.

    Pour commencer, je souhaiterai, à partir de données 4D de la forme imageDyn(x,y,z,t) créer des fonctions simples du type [intégrale des valeurs] et retourner une image paramétrique imageParam(x,y,z)

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    //
    //  TopCaoFilter.m
    //  TopCao
    //
    //  Copyright (c) 2010 Alexandre. All rights reserved.
    //
     
    #import "TopCaoFilter.h"
     
    @implementation TopCaoFilter
     
    - (void) initPlugin
    {
    }
     
    - (long) filterImage:(NSString*) menuName
    {
    	NSWindowController *window = [[NSWindowController alloc] initWithWindowNibName:@"Control_Panel" owner:self];
    	[window showWindow:self]; // This will bring up the window
    	return 0; // No errors
    }
     
    // COMPUTE ADC
    - (IBAction) computeADC:(id)sender;
    {
    	NSLog(@"computeADC!!!");
     
    	id waitWindow = [viewerController startWaitWindow:@"Computing ADC !"];
     
    	// New window
    	ViewerController *new2DViewer;
    	// Duplicate the current window
    	new2DViewer = [self duplicateCurrent2DViewerWindow];
     
    	NSString* message ;				// Declare message for window
    	int		i, x, zSize;			// Declare variables
    	float	*fImage, *fImageNew;	// Declare images
    	NSArray	*pixList, *pixListNew;	// 4D
    	DCMPix	*curPix, *curPixNew;	// 2D
     
    	pixList		= [viewerController pixList];
    	pixListNew	= [new2DViewer pixList];
    	zSize		= [pixList count];
     
     
    	message = @"zSize"; //@"Define this message in the Hello World plugin's preferences";
     
    	for (i = 0; i < zSize; i++)
    	{
    		curPix		= [pixList		objectAtIndex:i];
    		curPixNew	= [pixListNew	objectAtIndex:i];
     
    		// fImage is a pointer on the pixels, ALWAYS represented in float
    		fImage		= [curPix		fImage];
    		fImageNew	= [curPixNew	fImage];
    		x			= [curPixNew pheight] * [curPixNew pwidth];
     
    		while (x-- > 0) {
    			if (*fImage < 128) {
    				*fImageNew = 0;
    			}
    			else{
    				*fImageNew = *fImage;
     
    			}
     
    			fImage++;
    			fImageNew++;
    		}
    	}
     
    	[viewerController endWaitWindow: waitWindow];
     
     
    	// Apply clut & full dynamic range & refresh window
    	[new2DViewer ApplyCLUTString: @"Rainbow"];
    	[[new2DViewer imageView] setWLWW:0 :0];
    	[new2DViewer needsDisplayUpdate];
     
    	NSAlert *myAlert = [NSAlert alertWithMessageText:@"Control value text box"
    									   defaultButton:@"OK"
    									 alternateButton:nil
    										 otherButton:nil
    						   informativeTextWithFormat:@"%@", message];
     
    	[myAlert runModal];
    }
     
    - (IBAction) closePlugin:(id)sender;
    	{
     
    		[myWindow close];
    	}
    @end
    Voici ce que je suis arrivé à programmer en prenant des bouts de code par ci par là. Ma fonction computeADC, appelée par le bouton du même nom me permet d'appliquer un seuillage à la valeur de signal 128.
    Au dessus de cette valeur, l'image reste la même.

    Le processus s'applique à tous les images.

    Voilà, j'espère vous avoir donné assez d'explications et que vous pourrez me donner un petit coup de main.

    A bientôt

    Alex

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Les deux langages permettent de faire des programmes, certes. Mais c'est aussi le cas de bien d'autres langages qui n'ont rien à voir avec le C++.

    Objective-C est trop différent du C++ sur des aspects clef pour que ce code soit exploitable par un expert en C++ pour résoudre ton problème (à moins que cet expert ne soit aussi un expert en Objective-C ; mais la double casquette est rare).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. [Projet en cours] cherche PROGRAMMEUR 3D pour s'associer sur la dev de plugins 3D innovants
    Par EddyKem dans le forum Projets
    Réponses: 0
    Dernier message: 07/01/2015, 20h24
  2. [OsiriX] "Erreur de plugins : OsiriX ne peut pas charger le plugin sélectionné."
    Par annesophie2512 dans le forum Logiciels Libres & Open Source
    Réponses: 2
    Dernier message: 09/08/2014, 09h43
  3. [DEV] AppleScript et OsiriX
    Par PKO06 dans le forum AppleScript
    Réponses: 6
    Dernier message: 29/08/2007, 09h44
  4. Dev de plugin - commandes Eclipse por configurer les projets
    Par Bicnic dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 27/06/2007, 17h28
  5. dev de plugin Ant pour Maven 2
    Par DanielW33 dans le forum Maven
    Réponses: 7
    Dernier message: 28/07/2006, 16h24

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