Filterbild, das NaNs in Matlab enthält?

Ich habe ein 2D-Array doubles) repräsentiert einige Daten, und es hat eine Reihe vonNaNs drin. Das Konturdiagramm der Daten sieht folgendermaßen aus:

Alle Leerzeichen sindNaNs, der graue Diamant dient als Referenz und die ausgefüllte Kontur zeigt die Form meiner Daten. Wenn ich die Daten mit @ filteimfilt, dasNaNs deutlich in die Daten kauen, so dass wir so etwas wie das Ende:

Sie können sehen, dass das Support-Set erheblich verkürzt ist. Ich kann das nicht verwenden, da es einige der interessanteren Variationen der Kanten hervorgebracht hat (aus experimentellen Gründen sind diese Kanten wichtig).

Gibt es eine Funktion zum Filtern innerhalb einer Insel vonNaNs behandelt Kanten ähnlich wie Kanten von rechteckigen Filterfenstern, anstatt nur die Kanten abzutöten? Ein bisschen wie einnanmean -Funktion, außer für das Falten von Bildern?

Hier ist mein Filtercode:

filtWidth = 7;
imageFilter=fspecial('gaussian',filtWidth,filtSigma);
%convolve them
dataFiltered = imfilter(rfVals,imageFilter,'symmetric','conv');

und den Code zum Zeichnen des Konturdiagramms:

figure
contourf(dataFiltered); hold on
plot([-850 0 850 0 -850], [0 850 0 -850 0], 'Color', [.7 .7 .7],'LineWidth', 1); %the square (limits are data-specific)
axis equal

Der Austausch von Mathworks-Dateien enthält Code ndanfilter.m) das kommt dem nahe, was ich will, aber ich glaube, es interpoliert nurNaNs, die auf das @ gestreut siInner eines Bildes, keine Daten, die diesen Inseleffekt zeigen.

Hinweis: Ich habe gerade gefunden nanconv.m, das genau das tut, was ich will, mit einer sehr intuitiven Bedienung (ein Bild falten, @ ignorierNaN, ähnlich wienanmean works). Ich habe diesen Teil meiner akzeptierten Antwort erstellt und einen Vergleich mit der Leistung der anderen Antworten vorgenommen.

Verwandte Fragen

Gaußsche Filterung eines Bildes mit Nan in Python

Antworten auf die Frage(8)

Ihre Antwort auf die Frage