Entfernen periodische Rauschen aus einem Bild mit Hilfe der Fourier-Transformation
Ich bin der Durchführung der 2D-FFT auf ein bestimmtes Bild und ich bekomme seine spektralen Komponenten. Dieses Bild wurde überlagert durch ein anderes Bild zu erstellen, periodischen Lärm.
Das original-Bild als auch der periodische Lärm-version ist unten dargestellt:
Original Bild
Periodischen Lärm Bild
Filtern diese heraus, die ich verwendet, manuelle Boxen, die maskiert die Komponenten in der Größenordnung Spektrum, die sind ziemlich groß im Vergleich zu den anderen Komponenten wie unten gezeigt.
Nachdem dies geschehen ist, die ich durchführen einer inversen FFT, aber ich komme nicht auf das ursprüngliche Bild zurück.
Weiß jemand, was ich falsch mache?
Hier ist der code, den Masken, die die Werte und geht dann weiter zu tun, eine inverse 2D-FFT auf die maskierten spektrale Bild:
pat1 = imread('Pattern1.png');
spec_orig = fft2(double(pat1));
spec_orig2 = abs(spec_orig);
spec_img = fftshift(spec_orig2);
for j = 115:125
for n = 96:106
spec_img(n,j) = 0;
end
for n = 216:226
spec_img(n,j) = 0;
end
for n = 274:284
spec_img(n,j) = 0;
end
for n = 298:308
spec_img(n,j) = 0;
end
for n = 12:22
spec_img(n,j) = 0;
end
for n = 37:47
spec_img(n,j) = 0;
end
end
%Getting Back the Image for Pattern1
figure;subplot(2,1,1);
spec_img = log(1 + spec_img);
imshow(spec_img,[]);
subplot(2,1,2);
ptnfx = ifft2(spec_img);
imshow(ptnfx);
- Die doppelte for-Schleife am Anfang entfernt werden kann durch die Verwendung von array-Indizierung:
spec_img([96:106 216:226],115:125)=0
etc. - War nicht bewusst, dass Sie das tun könnten - danke!!!
- Kein problem. Dies ist der Grund, warum ich vorgeschlagen, vertraut mit matlab selbst:) wir Haben einen festen Griff auf die Grundlagen der Sprache kann Ihr Leben viel einfacher, und Ihr code viel eleganter und effizienter.
- Ich habe mir die Freiheit genommen, zu verbessern die flow von deiner Frage. Das ist eine gute Frage, und ich möchte, dass es ein gutes Beispiel für eine MATLAB-Frage/Antwort für die Rekordbücher. Danke für die Nachfrage eine große Frage!
- kein problem, ich war über das löschen der Frage, wie es war downvoted, aber ich denke, das war nicht der Fall.
- bitte lassen Sie die Frage intakt. Mit den änderungen die ich gemacht habe, es ist jetzt eine noch höhere Qualität Frage 🙂 Auch, Sie bekam nur 1 downvote... es gibt 2 upvotes. Das ist ein win! Es werden noch mehr kommen. Mach dir keine sorgen :)... und ich hoffe, dass die person, die downvoted werden, nehmen Sie seine/Ihre downvote, weil die änderungen die ich gemacht habe.
- Ich hatte eine faire paar Leute sagen, dass meine MATLAB-Fragen, die zu breit sind, aber außerhalb der MATLAB-Central-forum, ich glaube nicht, dass eine Menge Leute haben gefragt, Fragen über Bildbearbeitung
- Haben Sie Fragen, Fragen, die in der MATLAB-Central-forum, in dem Sie sagte, es war zu breit oder hier? Diese Frage ist sicher nicht zu breit. Sie zeigte uns, was du versucht hast und wo du steckengeblieben ist. Dies ist sehr geeignet für StackOverflow.
- BTW, können Sie natürlich weiterhin Fragen, Bildverarbeitung Fragen :D. ich bin der einzige, der zwei Leute, die haben das gold-Abzeichen in den tag, so ist es ein Beweis dafür, wie sehr ich mag die Gegend.
- Die Menschen haben gesagt, es ist zu breit für SO. Ich würde gebeten haben, M Mittel -, aber ich glaube, dass SO die Zukunft der APIs und codierungsreferenzen. Ja! Danke!!! Ich glaube, ich bin fast fertig mit dieser Aufgabe, wie dieses Frage - aber diese Zuordnung führt zu einer Bildverarbeitungs-Praktikum-erwarten Sie also mehr von mir hier.
- Ah, ich verstehe. Es ist schade, ich war nicht rund um, bevor diese Fragen verschloss. Ich hätte Sie beantwortet. In jedem Fall, ich freue mich auf Ihre weiteren Fragen. Viel Glück bei deinem Praktikum!
- Lassen Sie uns weiter, diese Diskussion im chat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Filtern in der Frequenz-Domäne ist eine heikle Sache richtig zu machen. Dein code hat ein paar Fehler, die verhindern, dass Sie die Rekonstruktion des ursprünglichen Bildes:
Sie sind die Anwendung der Filterung auf die Größe der Komponenten nur. Sie müssen dies tun, auf die original-Bild, Spektrum, nicht nur die Größe der Komponente. Die phase ist wichtig für die richtige Rekonstruktion. BTW, prägen, eine Signalverarbeitung Begriff, was Sie umsetzen, ist eine notch-filter oder ein band-stop-filter, der entfernt bestimmte auswählen von Frequenzen.
Sie zentriert das Spektrum über
fftshift
aber nach dem Sie gefiltert haben Sie vergessen rückgängig zu machen die shift -. Sie müssen sich aufifftshift
auf das resultierende gefilterte Bild rückgängig machen, das zentrieren.Du bist Suche nach der inversen FFT-Analyse der log-transformiert Bild. Denken Sie daran, dass die Durchführung einer log-Transformation das Spektrum ist nur für die Anzeige Zwecke. Sie nicht verwenden Sie diese beim filtern oder die Suche nach der inversen. Auf diese Weise wird Ihnen unbeabsichtigte Folgen, wie die Mehrheit des Spektrums verändert wurde, durch eine nicht-lineare operation. Sie haben es auf der original-Bild, Spektrum selbst.
Eine kleine Anmerkung, aber stellen Sie sicher, dass Sie anrufen
real
nach filtern Sie das Ergebnis nach der inversen FFT. Es gibt wahrscheinlich einige restliche imaginären Komponenten, die durch computational-floating-point-Fehler und so ruftreal
wird nur extrahieren, die realen Komponenten des Signals.Mit diesen Korrekturen, dies ist der code, den ich habe. Ich habe gelesen, Ihr Bild direkt von StackOverflow reproduzierbar zu sein:
Bekomme ich dieses Bild:
Eine ziemlich gute Rekonstruktion der ursprünglichen Bild werde ich hinzufügen. Du wirst sehen noch ein bisschen flitzen und das ist sehr stark abhängig von der notch-filter in Form und Größe. Vielleicht stellen Sie die Größe größer, und noch mehr, stellen Sie die Form der notch-filter kreisrund statt eckig. Dies hat eine Tendenz zu bewahren, das Originalbild mehr als harte Kanten eingeführt, die von den Ecken der Quadrate unerwünschte Klingeln Effekte.
subplot
ted in eine Abbildung.Pattern1.png
?