Bonjour,
Après quelques heures à me prendre la tête avec Matlab et à chercher sur la toile, je me tourne vers vous. J'ai besoin de redimensionner un certain nombre d'images mais ce de manière très contrôlée. J'ai donc codé ça moi même mais Matlab est réputé pour être très, très mauvais dès qu'il y a des boucles for en jeu, j'ai donc tenté de faire la même chose avec la fonction prévue pour ça dans Matlab, à savoir imresize.
Avec imresize j'aimerai pouvoir faire quelque chose de ce type IMNEW(i,j)=sum(2i+k,2j+l)*f(k,l) avec k et l entre -2 et 2 et f un noyau d'interpolation du type :
f =
0.0069 0.0208 0.0278 0.0208 0.0069
0.0208 0.0625 0.0833 0.0625 0.0208
0.0278 0.0833 0.1111 0.0833 0.0278
0.0208 0.0625 0.0833 0.0625 0.0208
0.0069 0.0208 0.0278 0.0208 0.0069
En fouillant la doc de imresize, il ne me semble pas possible de lui donner un noyau de convolution sous forme de matrice. Il semble que l'on puisse passer des choses de cette forme en argument :{f,w}, that specifies a custom interpolation kernel. In this cell array, f is a function handle for a custom interpolation kernel and w is the width of the custom kernel
J'ai essayé de créer :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part boxKernel = @(x)((-2.5 <= x) & (x < -1.5))*f(1,floor(x+2.5))+((-1.5 <= x) & (x < -0.5))*f(1,floor(x+2.5))+((-0.5 <= x) & (x < 0.5))*f(1,floor(x+2.5))+((0.5 <= x) & (x < 1.5))*f(1,floor(x+2.5))+((1.5 <= x) & (x < 2.5))*f(1,floor(x+2.5));
Avec x=5. Mais cela ne donne pas exactement le même résultat. Je me tourne donc vers vous, je ne vois plus quoi faire, j'espère que vous pourrez m'aider. Merci beaucoup
Code : Sélectionner tout - Visualiser dans une fenêtre à part boxKernel = @(x)(x==-2)*f(1,floor(x+2.5))+(x==-1)*f(1,floor(x+2.5))+(x==0)*f(1,floor(x+2.5))+(x==1)*f(1,floor(x+2.5))+(x==2)*f(1,floor(x+2.5));
Bonne après midi
Ps: voici le code fonctionnel que j'aimerai imiter avec imresize.
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 for l = 1:(n-1) tx=(tx-1)/2+1; ty=(ty-1)/2+1; for i = 1:tx for j = 1:ty sf=0; for p = 1:5 for q = 1:5 sf=sf+f(p,q)*x_gpyr(max(min(tx*2-1,2*i+p-3),1),max(min(ty*2-1,2*j+q-3),1),l); end end x_gpyr(i,j,l+1)=sf; end end end
Partager