[Matlab] fonctionnement de imresize
Résolu/Fermé
Enna7
Messages postés
40
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 avril 2012
-
4 déc. 2008 à 15:48
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 - 5 déc. 2008 à 14:10
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 - 5 déc. 2008 à 14:10
3 réponses
Fee Fay
Messages postés
635
Date d'inscription
vendredi 17 octobre 2008
Statut
Membre
Dernière intervention
31 mai 2009
377
4 déc. 2008 à 22:29
4 déc. 2008 à 22:29
Bonsoir
Difficile de faire passer un problème sorti de tout ce qu'il y a normalement autour. :-D
Cela dit, je trouve que c'est bien expliqué ; comme ce n'est pas du tout mon domaine, j'espère que je ne raconterais pas de conneries. :-(
Je vais parler en terme de convolution puisque c'est comme cela que je le vois, je n'ai jamais fait de cochonneries avec des images moi ! 8-)
Si tu convoles I et F pour obtenir P, si tu fais un imresize du filtre F, je pense qu'il faut aussi que tu fasses un imresize de I avant de la filtrer (c'est ce que tu as dû faire).
Le résultat obtenu sera effectivement P dont il faudra faire un imresize mais pas d'un facteur 10, je dirais plutôtd'un facteur 0.1 (mais on en revient à la question existentielle :-D), de plus, en prenant en compte la double intégrale donnant le résultat d'une convolution en 2D, le changement de variable implique que le résultat P obtenu sera multiplié par un facteur 100, il faudra donc diviser par 100.
Voilà, j'espère que c'est bien ça
Quant à la façon dont Matlab fonctionne pour les interpolations d'images, il faudrait se plonger en détails là-dedans - ce que je n'ai jamais fait - et on y trouverait très certainement une réponse cartésienne à ce phénomène paranormal de moceaux de pixels :-DDD
Mais pour résumer, je ne sais pas. :-(
Bonne nuit
Difficile de faire passer un problème sorti de tout ce qu'il y a normalement autour. :-D
Cela dit, je trouve que c'est bien expliqué ; comme ce n'est pas du tout mon domaine, j'espère que je ne raconterais pas de conneries. :-(
Je vais parler en terme de convolution puisque c'est comme cela que je le vois, je n'ai jamais fait de cochonneries avec des images moi ! 8-)
Si tu convoles I et F pour obtenir P, si tu fais un imresize du filtre F, je pense qu'il faut aussi que tu fasses un imresize de I avant de la filtrer (c'est ce que tu as dû faire).
Le résultat obtenu sera effectivement P dont il faudra faire un imresize mais pas d'un facteur 10, je dirais plutôtd'un facteur 0.1 (mais on en revient à la question existentielle :-D), de plus, en prenant en compte la double intégrale donnant le résultat d'une convolution en 2D, le changement de variable implique que le résultat P obtenu sera multiplié par un facteur 100, il faudra donc diviser par 100.
Voilà, j'espère que c'est bien ça
Quant à la façon dont Matlab fonctionne pour les interpolations d'images, il faudrait se plonger en détails là-dedans - ce que je n'ai jamais fait - et on y trouverait très certainement une réponse cartésienne à ce phénomène paranormal de moceaux de pixels :-DDD
Mais pour résumer, je ne sais pas. :-(
Bonne nuit
Enna7
Messages postés
40
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 avril 2012
9
5 déc. 2008 à 11:50
5 déc. 2008 à 11:50
Hello ^^
Merci pour ta réponse !
Alors je vais essayer d'expliquer encore mieux. En fait expérimentalement j'ai un objet (I) que j'observe à travers un filtre spécial (F), et je récupère l'image ainsi projetée (P) sur un détecteur.
Le Filtre me transforme l'image initiale comme une convolution : I * F = P. Mon but est de revenir à cette image initiale I à partir de ma projection P. Je fais en fait I=P/F. P est la projection sur mon détecteur, et F le filtre que je connais. Évidement on ne peut pas faire ce calcul directement, c'est pour ça que j'utilise les transformées de Fourier pour faire une convolution inverse.
Quand l'image, le filtre et la projection sont "à la même échelle" y'a pas de soucis ça fonctionne.
Sauf que comme j'essaie de l'expliquer, expérimentalement, l'objet le filtre et le détecteur ne sont pas les uns sur les autres mais l'objet est à une distance d1=10 du filtre, et le filtre à une distance d2=24 du détecteur. L'image projetée sur le détecteur est donc représentée avec un grandissement (d2/d1=2.4).
Pour en tenir compte juste je faisais juste un imresize sur le filtre... il manque donc un imresize ou sur la projection ou sur l'image pour que les trois soient dans le meme plan.
J'ai réessayé avec un imresize de 24 sur le filtre, de 10 sur la projection, et il faut que je fasse un imresize de 0.076 pour retrouver l'image d'origine... lorsque j'ai un grandissement de 2.4...
Je comprends donc pourquoi tu me dis qu'il faut que j'utilise un facteur 0.1... mais d'un je comprend pas pourquoi la valeur est de 0.076 alors qu'elle devrait être de 0.1 comme tu le dis ... Ensuite, quand tu écris "en prenant en compte la double intégrale donnant le résultat d'une convolution en 2D, le changement de variable implique que le résultat P obtenu sera multiplié par un facteur 100, il faudra donc diviser par 100. "
là je comprends pas... comme je suis en 2D il faut que je divise deux fois par 10 si je fais un imresize de 10 sur ma projection ?
En gros si on se met dans le "plan de la projection" ça revient à dire : I'=P/(F*2.4)=(P*10)/(F*24) et I'=100*I dou un imresize de 100 sur l'image reconstruite ?
Et effectivement j'ai toujours mon problème existentiel sur la gestion des décimaux par imresize... ;)
Merci pour l'aide en tout cas!
Enna.
Merci pour ta réponse !
Alors je vais essayer d'expliquer encore mieux. En fait expérimentalement j'ai un objet (I) que j'observe à travers un filtre spécial (F), et je récupère l'image ainsi projetée (P) sur un détecteur.
Le Filtre me transforme l'image initiale comme une convolution : I * F = P. Mon but est de revenir à cette image initiale I à partir de ma projection P. Je fais en fait I=P/F. P est la projection sur mon détecteur, et F le filtre que je connais. Évidement on ne peut pas faire ce calcul directement, c'est pour ça que j'utilise les transformées de Fourier pour faire une convolution inverse.
Quand l'image, le filtre et la projection sont "à la même échelle" y'a pas de soucis ça fonctionne.
Sauf que comme j'essaie de l'expliquer, expérimentalement, l'objet le filtre et le détecteur ne sont pas les uns sur les autres mais l'objet est à une distance d1=10 du filtre, et le filtre à une distance d2=24 du détecteur. L'image projetée sur le détecteur est donc représentée avec un grandissement (d2/d1=2.4).
Pour en tenir compte juste je faisais juste un imresize sur le filtre... il manque donc un imresize ou sur la projection ou sur l'image pour que les trois soient dans le meme plan.
J'ai réessayé avec un imresize de 24 sur le filtre, de 10 sur la projection, et il faut que je fasse un imresize de 0.076 pour retrouver l'image d'origine... lorsque j'ai un grandissement de 2.4...
Je comprends donc pourquoi tu me dis qu'il faut que j'utilise un facteur 0.1... mais d'un je comprend pas pourquoi la valeur est de 0.076 alors qu'elle devrait être de 0.1 comme tu le dis ... Ensuite, quand tu écris "en prenant en compte la double intégrale donnant le résultat d'une convolution en 2D, le changement de variable implique que le résultat P obtenu sera multiplié par un facteur 100, il faudra donc diviser par 100. "
là je comprends pas... comme je suis en 2D il faut que je divise deux fois par 10 si je fais un imresize de 10 sur ma projection ?
En gros si on se met dans le "plan de la projection" ça revient à dire : I'=P/(F*2.4)=(P*10)/(F*24) et I'=100*I dou un imresize de 100 sur l'image reconstruite ?
Et effectivement j'ai toujours mon problème existentiel sur la gestion des décimaux par imresize... ;)
Merci pour l'aide en tout cas!
Enna.
Fee Fay
Messages postés
635
Date d'inscription
vendredi 17 octobre 2008
Statut
Membre
Dernière intervention
31 mai 2009
377
5 déc. 2008 à 14:10
5 déc. 2008 à 14:10
Bonjour
Merci pour le complément d'informations ;-)
En fait je vais expliquer ce à quoi je pensais avec des formules, ce sera plus simple.
Mathématiquement, je comprends ce que tu m'as écrit comme quelque chose de ce type :
P(x)=∫∫I(y)F(y-x)dy
Donc, si on fait un imresize de 1/α du filtre F, cela revient à considérer le filtre G(x)=F(αx).
A l'aide du filtre G et de l'imresize de J(x)=I(αx) de I, on peut obtenir l'imresize Q(x)=P(αx) de P :
∫∫J(y)G(y-x)dy = ∫∫I(αy)F(α(y-x))dy
En faisant le changement de variable y'=αy on a dy'=α²dy et donc :
∫∫J(y)G(y-x)dy = (1/α²)*∫∫I(y)F(y-αx)dy
∫∫J(y)G(y-x)dy = (1/α²)*P(αx)
α²Q(x) = ∫∫J(y)G(y-x)dy
Voilà ce que je voulais dire.
Donc, comme on obtient α²Q par cette méthode, je me disais qu'il fallait faire un imresize du résultat Q par 1/α pour obtenir P :
α²Q(x/α) = α²P(αx/α) = α²P(x)
Puis diviser par α² :
P(x) = (1/α²)α²P(x)
Maintenant, quant à savoir pourquoi 0.076... ce n'est pas toujours évident de manipuler les TF, elles ne sont pas normalisées partout pareil dans les livres, dans les programmes non plus, de plus avec la TF discrète, il y a le facteur qui dépend du nombre d'éléments du vecteur, etc, etc... tu as peut-être juste un problème de facteur lors du calcul de tes TF.
Voilà, je crois que je ne vais pas pouvoir beaucoup faire plus, je n'ai pas d'autres idées sur la question.
Bonne journée
Merci pour le complément d'informations ;-)
En fait je vais expliquer ce à quoi je pensais avec des formules, ce sera plus simple.
Mathématiquement, je comprends ce que tu m'as écrit comme quelque chose de ce type :
P(x)=∫∫I(y)F(y-x)dy
Donc, si on fait un imresize de 1/α du filtre F, cela revient à considérer le filtre G(x)=F(αx).
A l'aide du filtre G et de l'imresize de J(x)=I(αx) de I, on peut obtenir l'imresize Q(x)=P(αx) de P :
∫∫J(y)G(y-x)dy = ∫∫I(αy)F(α(y-x))dy
En faisant le changement de variable y'=αy on a dy'=α²dy et donc :
∫∫J(y)G(y-x)dy = (1/α²)*∫∫I(y)F(y-αx)dy
∫∫J(y)G(y-x)dy = (1/α²)*P(αx)
α²Q(x) = ∫∫J(y)G(y-x)dy
Voilà ce que je voulais dire.
Donc, comme on obtient α²Q par cette méthode, je me disais qu'il fallait faire un imresize du résultat Q par 1/α pour obtenir P :
α²Q(x/α) = α²P(αx/α) = α²P(x)
Puis diviser par α² :
P(x) = (1/α²)α²P(x)
Maintenant, quant à savoir pourquoi 0.076... ce n'est pas toujours évident de manipuler les TF, elles ne sont pas normalisées partout pareil dans les livres, dans les programmes non plus, de plus avec la TF discrète, il y a le facteur qui dépend du nombre d'éléments du vecteur, etc, etc... tu as peut-être juste un problème de facteur lors du calcul de tes TF.
Voilà, je crois que je ne vais pas pouvoir beaucoup faire plus, je n'ai pas d'autres idées sur la question.
Bonne journée