2009-04-18 7 views
0

Ci-dessous une partie du code que j'ai essayé d'éditer, MATLAB deconvolucy.
il semble avoir un problème avec DAMPAR où le type de classe ne correspond pas.Problème avec le type de tableau "DAMPAR" dans MATLAB deconvolucy.m

Quelqu'un peut-il aider ou est-ce que quelqu'un connaît un meilleur moyen d'appeler une image que je (comme dans deconvolucy.m) tolérerait? [Peut-être que je devrais convertir l'image en tableau avant de l'utiliser? comment puis-je le fais]

// - Code - //
I = imread (? C: \ Users \ Lem \ Desktop \ III \ TIFF \ 69_M.000.tif ', « TIF ');
classe (I)
PSF = fspécial ('gaussien', 7,10);
V = 0,0001;
BlurredNoisy = imnoise (imfiltre (I, PSF), 'gaussien', 0, V); WT = zéros (taille (I))
;
WT (5: extrémité 4,5: extrémité 4) = 1; J1 = déconvulser (BlurredNoisy, PSF); J2 = déconvolution (BlurredNoisy, PSF, 20, sqrt (V)); J3 = déconvolution (BlurredNoisy, PSF, 20, sqrt (V), WT);
// ...
...
... //

??? Erreur lors de l'utilisation de ==> deconvlucy> parse_inputs à 316
Dans la fonction deconvlucy, DAMPAR doit être de la même classe que l'image d'entrée.

Erreur dans ==> deconvlucy à 102
[J, PSF, NUMIT, DAMPAR, AFFICHEUR, POIDS, SUBSMPL, sizeI, classi, numNSdim] = ...

Répondre

2

Vous avez lu dans une image en utilisant imread. Donc ça vient probablement en tant que uint8? L'aide pour imread indique que le résultat sera entier d'un certain ordre pour une image de tiff. Quelle classe étais-je quand il a été retourné?

Vous avez ensuite filtré l'image. Il semble que imfilter retournera une image entière pour une image d'entrée entière.

Ensuite, vous ajoutez du bruit en utilisant imnoise. À partir de l'aide en ligne pour imnoise, il convertit en interne l'image en un nombre [double] (0,1), ajoute le bruit gaussien, puis le convertit en sortie entière. Donc, votre image floue devrait toujours être entière, probablement des éléments uint8.

L'aide de fspecial indique qu'il retournera une sortie double précision pour PSF.

Vous avez appelé deconvolucy avec seulement deux arguments, donc il utilise la valeur par défaut pour DAMPAR. (Je soutiendrai que ceci ne devrait pas échouer ici, l'auteur de deconvolucy ne semble pas avoir fourni une valeur par défaut cohérente avec les entrées.)

Je ne connais pas assez l'IPT ou la déconvolution. suggère de réexécuter ce code, en utilisant deux appels différents.

J1 = deconvlucy(BlurredNoisy,PSF,[],0); 

J1 = deconvlucy(BlurredNoisy,PSF,[],uint8(0)); 

Si l'un de ces appels n'a pas résolu le problème, il suggère que deconvolucy attend une double entrée pour l'image, BlurredNoisy. L'aide en ligne pour la déconvolution n'était pas spécifique ici. Il dit seulement que je peux être un tableau de dimension N ou un tableau de cellules.Plus loin dans l'aide, il appelle le résultat un tableau numérique. Donc, je crois que l'image pour déconvolucie devrait être une image en virgule flottante. (Par mes normes, c'est une faille dans l'aide.)

J'essaierais alors probablement de mettre à l'échelle votre image à [0,1] comme un double. C'est juste une supposition cependant. Donc, quelque chose comme:

BlurredNoisy = double(BlurredNoisy)/255; 

Cela suppose que votre image a été uint8 en classe à l'origine.