2016-04-07 12 views
1

Ich möchte die Größe eines 512X512-Bildes in ein 363X762-Bild ändern, das größer als das Originalbild (der Größe 512X512) sein wird. Diese zusätzlichen Pixelwerte müssen unterschiedliche Werte im Bereich von 0 bis 255 haben. Ich habe versucht, den folgenden Code:Wie kann ich ein Bild vergrößern, indem ich zusätzliche Pixel mit Matlab hinzufüge?

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; 

Aber ich denke, das ist ein langwieriges ist und der Ausgang ist auch nicht so wie gewünscht. Könnte jemand mir einen besseren Code vorschlagen, um das auszuführen? Vielen Dank im Voraus.

Antwort

1

Ich denke, dass der Code, den Sie haben, eigentlich ziemlich nahe an ideal ist, außer dass Sie viele fest codierte Werte darin haben. Diese sollten wirklich im laufenden Betrieb berechnet werden. Das können wir tun, indem wir numel verwenden, um die Anzahl der Elemente in B zu zählen.

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; 

Diese Flexibilität ist wichtig, und die Bedeutung ist tatsächlich über die Tippfehler in der letzten Zeile gezeigt:

B(262155:263538)=0; 

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

Auch brauchen Sie nicht diese zusätzliche Aufgaben auf Null am Ende, weil Sie initialisieren die Matrix muss an erster Stelle Null sein.

Randbemerkung

Es sieht aus wie Sie die ursprünglichen Bilddaten für jede Spalte über mehrere Spalten hinweg verbreiten. Ich schätze, das ist nicht was du willst. Sie möchten wahrscheinlich nur die ersten 363 Reihen von I greifen, die in B platziert werden sollen. Sie können, dass diese Art und Weise tun:

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

aktualisieren

Wenn Sie die anderen Werte wollen etwas andere als Null ist, können Sie Ihre Matrix initialisieren zu sein, die statt schätzen.

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

Wenn Sie wollen, dass sie zufällige ganze Zahlen zwischen 0 und 255 sein, verwenden Sie randi die Matrix zu initialisieren.

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

Oh danke @suever! Aber wie wäre es, wenn Sie diese zusätzlichen Pixel auf andere Werte im Bereich von 0 bis 255 und nicht nur auf Null ändern würden? Könnten Sie das bitte auch versuchen? – sai

+0

@lakshmisai Aktualisiert mit einem Beispiel, wie das geht. – Suever

+0

@sueverCan Ich habe einige zufällige Werte zugewiesen anstatt eines einzelnen Wertes für alle zusätzlichen Pixel? Jedenfalls habe ich es gerade überprüft. Es funktioniert perfekt in der Art, wie ich es brauchte. Danke eine Tonne :) – sai