2016-04-07 1 views
1

Je voudrais redimensionner une image 512X512 en image 363X762 qui sera plus grande que l'image originale (de la taille 512X512). Ces valeurs de pixels supplémentaires doivent être des valeurs différentes comprises entre 0 et 255. J'ai essayé le code suivant:Comment redimensionner une image en ajoutant des pixels supplémentaires en utilisant matlab

I=imread('photo.jpg'); %photo.jpg is a 512X512 image 
B=zeros(363,726); 
sizeOfMatrixB=size(B); 
display(sizeOfMatrixB); 
B(1:262144)=I(1:262144); 
imshow(B); 
B(262155:263538)=0; 

Mais je pense que c'est long et la sortie est pas non plus comme on le souhaite. Quelqu'un pourrait-il me suggérer avec un meilleur morceau de code pour effectuer cela. Merci d'avance.

Répondre

1

Je pense que le code que vous avez est plutôt proche de l'idéal, sauf que vous avez beaucoup de valeurs codées en dur. Ceux-ci devraient vraiment être calculés à la volée. Nous pouvons le faire en utilisant numel pour compter le nombre d'éléments dans B.

B = zeros(363, 726); 

%// Assign the first 262144 elements of B to the values in I 
%// all of the rest will remain as 0 
B(1:numel(I)) = I; 

Cette flexibilité est importante et l'importance est en fait démontré par la faute de frappe dans votre dernière ligne:

B(262155:263538)=0; 

%// Should be 
B(262144:263538)=0; 

En outre, vous n'avez pas besoin de ces missions supplémentaires à zéro à la fin parce que vous initialisez la matrice doit être tout à zéro en premier lieu.

A Side Note

On dirait que vous répartissez les données d'image originales pour chaque colonne sur plusieurs colonnes. Je suppose que ce n'est pas ce que tu veux. Vous voulez probablement seulement attraper les premières 363 rangées de I à placer dans B. Vous pouvez le faire de cette façon:

B = zeros(363, 726); 
B(1:size(B, 1), 1:size(I, 2)) = I(1:size(B, 1), :); 

Mise à jour

Si vous voulez que les autres valeurs à quelque chose autre que zéro, vous pouvez initialiser votre matrice pour être que valeur à la place.

value = 2; 
B = zeros(363, 726) + value; 
B(1:numel(I)) = I; 

Si vous voulez qu'ils soient des entiers aléatoires entre 0 et 255, utilisez randi pour initialiser la matrice.

B = randi([0 255], 363, 726); 
B(1:numel(I)) = I; 
+0

Oh merci @suever! Mais que diriez-vous de changer ces pixels supplémentaires à d'autres valeurs dans la plage 0-255 plutôt que simplement zéro. Pourriez-vous essayer cela aussi? – sai

+0

@lakshmisai Mis à jour avec un exemple de comment faire cela. – Suever

+0

@sueverCan J'ai différentes affectations de valeurs aléatoires au lieu d'une seule valeur pour tous les pixels supplémentaires? Quoi qu'il en soit, je l'ai vérifié tout à l'heure. Cela fonctionne parfaitement de la manière dont j'ai besoin. Merci beaucoup :) – sai