Ich verstehe zwar was der Code machen soll, aber ich verstehe die Implementierung nicht so richtig. Im detail geht es um den code deconvL2.m und in weiterer folle um deconvSps.m
Ich wäre aber schon mehr als Zufrieden wenn ich wüsste was deconvL2.m macht.
Es geht um einen deconvolution Code der den Richard Lucy Algorithmus im Zeitbereich realisiert. ich habe schon mal einen Teildurchgesehen, verstehe aber das Zeug in der for schleife nicht ganz. Kann man da draus vielleicht eine Formel schreiben damit das ganze "lesbarer" wird für menschen die im code sowas nicht wirklich sehen?
Vielleicht kann mir hier ja jemand helfen.
Vielen Dank!!!
Code:
function[x]=deconvL2(I,filt1,we,max_it)
%note: size(filt1)is expected to be odd in both dimensions
% get the size of filter/2
%rounds the elements of X to the nearest integers towards minus infinity.
hfs1_x1 = floor((size(filt1,2)-1)/2);
hfs1_y1 = floor((size(filt1,1)-1)/2);
%rounds the elements of X to the nearest integers towards infinity.
hfs1_x2 = ceil((size(filt1,2)-1)/2);
hfs1_y2 = ceil((size(filt1,1)-1)/2);
%array of help variables
shifts1 = [-hfs1_x1 hfs1_x2 -hfs1_y1 hfs1_y2];
%some more help vars
hfs_x1 = hfs1_x1;
hfs_x2 = hfs1_x2;
hfs_y1 = hfs1_y1;
hfs_y2 = hfs1_y2;
%Abmessungen werden "vergrößert" --> wegen randbereiche (je nach größe
%des Filters
m = m + hfs_x1 + hfs_x2;
n = n + hfs_y1 + hfs_y2;
N = m * n; %gesamte Pixelanzahl
%setze die maske auf 1(originale bildabmessungen)
mask = zeros(n,m);
mask(hfs_y1+1:n-hfs_y2,hfs_x1+1:m-hfs_x2) = 1;
tI = I; %temp bild
I = zeros(n,m); %'speicher' reservieren --> von 'größerem' bild
I(hfs_y1+1:n-hfs_y2,hfs_x1+1:m-hfs_x2) = tI; % bild ist jetzt wieder original % + nullen für randbereiche
%die eingefügent randbereiche(hier 7) erhalten die randwerte des originales
x = tI([ones(1,hfs_y1),1:end, end*ones(1,hfs_y2)],[ones(1,hfs_x1),1:end,end*ones(1,hfs_x2)]);
%faltung von x mit filt
b = conv2(x.*mask,filt1,'same');
%help vectors
dxf = [1-1];
dyf = [1;-1];
% wenn filter über 25x25 ist dann mache eine conv, sonst eine fftconv % PSF * (gestörtesBild * PSF180gedreht) * entspricht faltung
%Ax = Cf^T * Cf .... Cf = PSF = filt1
if(max(size(filt1)<25))
Ax = conv2(conv2(x,fliplr(flipud(filt1)),'same').*mask, filt1,'same');
else
Ax = fftconv(fftconv(x,fliplr(flipud(filt1)),'same').*mask, filt1,'same');
end
%fehler mit psf und um 180° gedrehte psf falten
if(max(size(filt1)<25))
Ap=conv2(conv2(p,fliplr(flipud(filt1)),'same').*mask, filt1,'same');
else
Ap=fftconv(fftconv(p,fliplr(flipud(filt1)),'same').*mask, filt1,'same');
end
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.