Hallo zusammen , ich möchte von 2 Bilder (link und recht ) ein Disparitätbild vom Matlab erzeugen , wobei man die SAD Funktion berechnet .
Hat jemand eine Idee , wie soll es gehen ?
Danke für ihre Antwort .
_________________
Code
Diamond
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.07.2010, 13:24
Titel:
Ich studiere gerade mit diesem Code , aber ein gute Ergebnis habe ich noch nicht . Mir ist bei ein paar Stelle in diesem Code noch nich klar
Ich hoffe , dass jemand mit mir dies Code zusammen studieren .
Code:
Inputs: Left Image(var: leftImage), Right Image(var: rightImage),
% Window Size (var: windowSize), Minimum Disparity (dispMin), Maximum % Disparity (dispMax) % Outputs: Disparity Map (var: dispMap), Time taken (var: timeTaken) % Example Usage of Function: [dispMap, timeTaken]=funcSADL2R('StereogramLeft.jpg', 'StereogramRight.jpg', 9, 0, 16); % ************************************************************************* function[dispMap, timeTaken]=funcSADL2R(leftImage, rightImage, windowSize, dispMin, dispMax) try % Grab the image information (metadata) of left image using the function imfinfo
leftImageInfo=imfinfo(leftImage);
% Since SADL2R is applied on a grayscale image, determine if the % input left image is already in grayscale or color if(getfield(leftImageInfo,'ColorType')=='truecolor') % Read an image using imread function, convert from RGB color space to % grayscale using rgb2gray function and assign it to variable leftImage
leftImage=rgb2gray(imread(leftImage));
% Convert the image from uint8 to double
leftImage=double(leftImage);
elseif(getfield(leftImageInfo,'ColorType')=='grayscale') % If the image is already in grayscale, then just read it.
leftImage=imread(leftImage);
% Convert the image from uint8 to double
leftImage=double(leftImage);
else error('The ColorType of Left Imageis not acceptable. Acceptablecolor types are truecolor or grayscale.');
end end catch % if it is not an image but a variable
leftImage=leftImage;
end try % Grab the image information (metadata) of right image using the function imfinfo
rightImageInfo=imfinfo(rightImage);
% Since SADL2R is applied on a grayscale image, determine if the % input right image is already in grayscale or color if(getfield(rightImageInfo,'ColorType')=='truecolor') % Read an image using imread function, convert from RGB color space to % grayscale using rgb2gray function and assign it to variable rightImage
rightImage=rgb2gray(imread(rightImage));
% Convert the image from uint8 to double
rightImage=double(rightImage);
elseif(getfield(rightImageInfo,'ColorType')=='grayscale') % If the image is already in grayscale, then just read it.
rightImage=imread(rightImage);
% Convert the image from uint8 to double
rightImage=double(rightImage);
else error('The ColorType of Right Imageis not acceptable. Acceptablecolor types are truecolor or grayscale.');
end end catch % if it is not an image but a variable
rightImage=rightImage;
end % Find the size (columns and rows) of the left image and assign the rows to % variable nrLeft, and columns to variable ncLeft [nrLeft,ncLeft] = size(leftImage);
% Find the size (columns and rows) of the right image and assign the rows to % variable nrRight, and columns to variable ncRight [nrRight,ncRight] = size(rightImage);
% Check to see if both the left and right images have same number of rows % and columns if(nrLeft==nrRight && ncLeft==ncRight) else error('Both left and right images should have the same number of rows and columns');
end % Check the size of window to see if it is an odd number. if(mod(windowSize,2)==0) error('The window size must be an odd number.');
end % Check whether minimum disparity is less than the maximum disparity. if(dispMin>dispMax) error('Minimum Disparity must be less than the Maximum disparity.');
end % Create an image of size nrLeft and ncLeft, fill it with zeros and assign % it to variable dispMap
dispMap=zeros(nrLeft, ncLeft);
% Find out how many rows and columns are to the left/right/up/down of the % central pixel based on the window size
win=(windowSize-1)/2;
tic; % Initialize the timer to calculate the time consumed. for(i=1+win:1:nrLeft-win) for(j=1+win+dispMax:1:ncLeft-win)
prevSAD = 65532;
temp=0.0;
bestMatchSoFar = dispMin;
for(dispRange=-dispMin:-1:-dispMax)
sad=0.0;
for(a=-win:1:win) for(b=-win:1:win) if(j-win+dispRange > 0)
temp=leftImage(i+a,j+b)-rightImage(i+a,j+b+dispRange);
if(temp<0.0)
temp=temp*-1.0;
end
sad=sad+temp;
end end end if(prevSAD > sad)
prevSAD = sad;
bestMatchSoFar = dispRange;
end end
dispMap(i,j) = -bestMatchSoFar;
end end % Stop the timer to calculate the time consumed.
timeTaken=toc;
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.