die Löcher in einem Bild durch Mittelwerte der umgebenden Pixel
kann jemand entfernen bitte helft mir aus den benachbarten Nicht-Null-Pixel genommen, diese schwarzen Löcher, die durch Werte in Füllung. dank
die Löcher in einem Bild durch Mittelwerte der umgebenden Pixel
kann jemand entfernen bitte helft mir aus den benachbarten Nicht-Null-Pixel genommen, diese schwarzen Löcher, die durch Werte in Füllung. dank
Es ist eine Datei auf Matlab Dateiaustausch, - inpaint_nans dass macht genau das, was du willst. Der Autor erklärt, warum und in welchen Fällen es besser ist als die Delaunay-Triangulation.
danke Mann das gibt ein befriedigendes Ergebnis –
einem schwarzen Bereich zu füllen, gehen Sie wie folgt vor:
1) Stellen Sie einen Teilbereich in den schwarzen Bereich enthalten ist, desto kleiner, desto besser. Der beste Fall ist nur die Grenzpunkte des Schwarzen Lochs.
2) Erstellen einer Delaunay-Triangulation der nicht-schwarzen Punkte in Inneren der Subregion durch:
tri = DelaunayTri(x,y); %# x, y (column vectors) are coordinates of the non-black points.
3) Bestimme die schwarzen Punkte in dem Dreieck Delaunay von:
[t, bc] = pointLocation(tri, [x_b, y_b]); %# x_b, y_b (column vectors) are coordinates of the black points
tri = tri(t,:);
4) interpolieren:
v_b = sum(v(tri).*bc,2); %# v contains the pixel values at the non-black points, and v_b are the interpolated values at the black points.
Scheint, es funktioniert, lass mich es versuchen.Danke für Ihre Mühe –
Eine gute Möglichkeit, dies zu tun, ist es, die linear heat equation zu lösen. Was Sie tun, ist die "Temperatur" (Intensität) der Pixel in der guten Gegend zu fixieren und die Wärme in die schlechten Pixel fließen zu lassen. Eine passable, aber etwas langsame Vorgehensweise war es, das Bild immer wieder zu mitteln und dann die guten Pixel mit newImage(~badPixels) = myData(~badPixels);
auf ihren ursprünglichen Wert zurückzusetzen.
ich die folgenden Schritte aus:
Sie könnten Lungs wiederholen, bis das Bild zu verändern aufhört, und man kann einen kleineren Lungs Kernel für höhere Präzision verwenden --- aber das gibt gute Ergebnisse:
Der Code ist wie folgt:
numIterations = 30;
avgPrecisionSize = 16; % smaller is better, but takes longer
% Read in the image grayscale:
originalImage = double(rgb2gray(imread('c:\temp\testimage.jpg')));
% get the bad pixels where = 0 and dilate to make sure they get everything:
badPixels = (originalImage == 0);
badPixels = imdilate(badPixels, ones(12));
%# Create a big gaussian and an averaging kernel to use:
G = fspecial('gaussian',[1 1]*100,50);
H = fspecial('average', [1,1]*avgPrecisionSize);
%# User a big filter to get started:
newImage = imfilter(originalImage,G,'same');
newImage(~badPixels) = originalImage(~badPixels);
% Now average to
for count = 1:numIterations
newImage = imfilter(newImage, H, 'same');
newImage(~badPixels) = originalImage(~badPixels);
end
%% Plot the results
figure(123);
clf;
% Display the mask:
subplot(1,2,1);
imagesc(badPixels);
axis image
title('Region Of the Bad Pixels');
% Display the result:
subplot(1,2,2);
imagesc(newImage);
axis image
set(gca,'clim', [0 255])
title('Infilled Image');
colormap gray
Aber man kann eine ähnliche Lösung von der Bildverarbeitungs Toolbox roifill
erhalten wie folgt:
newImage2 = roifill(originalImage, badPixels);
figure(44);
clf;
imagesc(newImage2);
colormap gray
notice Ich benutze die gleichen badPixels wie zuvor definiert.
http://cs.stackexchange.com/questions/23794/interpolation-optimization-problem – Royi
Duplizieren auf DSP: http://dsp.stackexchange.com/q/2803/590 – Chris
Lösen, dass: http://cs.stackexchange.com/questions/23794/interpolation-optimization-problem würde es tun .. – Royi