2017-02-14 6 views
0

Ich möchte ein Bild unscharf machen. Das Bild ist 1100x1100 und die Colormap ist 256x3. Um ein Bild zu verwischen, würde man eine Matrixmultiplikation gemäß der folgenden Gleichung durchführen: Y = XH ', wobei X das Originalbild ist. Um das Bild unscharf zu machen, würde man X = Y/H 'machen. Daher habe ich den folgenden Code ausgeführt.Entblocken eines Bildes durch Matrixoperationen in MATLAB

L = 1100; 
N = 850; 
c = [ones(1,N)/N zeros(1,L-N)]; 
r = [1/N zeros(1,L-1)]; 
H = toeplitz(c,r); 
pic1 = pic/H'; //pic is defined as the original image: 1100 x 1100 
image(dePic); 

Allerdings, wenn ich diesen Code ausführen, bekomme ich nur eine Heatmap und nicht das Originalbild. Wo gehe ich falsch? Mache ich Mathe in MATLAB falsch? N=850 ist der optimale Wert für N. Das habe ich bestätigt. Aber nur für die Gesundheitsprüfung, habe ich versucht, N zu ändern und hatte nicht viel Glück.

Ich habe auch den folgenden Code ausprobiert. Aber es hat nur die Heat Map in Schwarz-Weiß umgewandelt und hatte keinen großen Einfluss.

L = 1100; 
N = 850; 
c = [ones(1,N)/N zeros(1,L-N)]; 
r = [1/N zeros(1,L-1)]; 
H = toeplitz(c,r); 
pic1 = pic/H'; 
colormap(map); //map is 256x3 
image(dePic); 
axis image; 
+0

Nur für den Fall, haben Sie bemerkt, dass die "Bildverarbeitung Toolbox" einige eingebaute Deblurring-Funktion enthalten? – obchardon

Antwort

0

Ich bin ein kompletter Dummkopf. Wenn ich image() rufe, gebe ich das falsche Argument ein. Hier ist der aktualisierte Code, der wunderbar funktioniert.

L = 1100; 
N = 850; 
c = [ones(1,N) zeros(1,L-N)]; 
r = [1 zeros(1,L-1)]; 
H = toeplitz(c,r); 
H = H/N; 
pic1 = pic*inv(H'); 
colormap(map); 
image(pic1); 
axis image; 

Dies funktioniert.

Verwandte Themen