Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.78 KB | None | 0 0
  1. % load('stereoparams.mat'); % zaladowanie automatyczne parametrow
  2. % kalibracyjnych
  3. close all; % zamkniecie okien
  4.  
  5. % showExtrinsics(stereoParams);  % pokazanie wynikow kalibracji
  6. format long
  7. % przygotowanie zmiennych pod zaladowanie obrazow
  8. mainInputFolder = 'Baza';                      
  9. leftInputFolder = 'L';
  10. rightInputFolder = 'R';
  11.  
  12. % wczytanie wszystkich plikow jpg z glownego folderu
  13. filePattern = fullfile(mainInputFolder, leftInputFolder, '*.jpg');                          
  14. theFiles = dir(filePattern);
  15.  
  16. % interwaly czasowe do wyswietlania zdjec            
  17. time=0.1;
  18. time2 = 0.1;
  19.  
  20. % parametry wykrywania
  21. blurValue = 3;
  22. BlockSize = 13;
  23. SE = strel('diamond', 1);                                              
  24. SE2 = strel('diamond', 11);
  25. threshold = 25;
  26.  
  27. % glowna petla, ktora wg ilosci zdjec robi mape dysparycji i przetwarza ja
  28. for number = 40:length(theFiles)
  29.        
  30.         % wczyanie zdjec wejsciowych
  31.         frameLeft =  imread([mainInputFolder '\' leftInputFolder '\' theFiles(number).name]);
  32.         frameRight =  imread([mainInputFolder '\' rightInputFolder '\' theFiles(number).name]);
  33.  
  34.         % wyblurowanie zdjec
  35.         frameLeftBlur = imgaussfilt(frameLeft, blurValue);
  36.         frameRightBlur = imgaussfilt(frameRight, blurValue);
  37.        
  38.         % rektyfikacja
  39.         [frameLeftRect, frameRightRect] = ...
  40.             rectifyStereoImages(frameLeftBlur, frameRightBlur, stereoParams);
  41.         figure;
  42.        
  43.         imshow(stereoAnaglyph(frameLeftRect, frameRightRect));
  44.         title('Anaglif');
  45.        
  46.         pause(time2);
  47.        
  48.         % konwersja zdjec do skali szarosci
  49.         frameLeftGray  = rgb2gray(frameLeftRect);
  50.         frameRightGray = rgb2gray(frameRightRect);
  51.        
  52.         % metoda wykonujaca metode dysparycji wg zdjec po rektyfikacji
  53.      
  54.         disparityMap = disparity(frameLeftGray, frameRightGray, 'BlockSize', BlockSize, 'ContrastThreshold', 0.2);
  55.         figure;
  56.         imshow(imdilate(disparityMap, SE), [0, 64]);
  57.        
  58.         pause(time);
  59.        
  60.         disparityMapSE = imerode(disparityMap, SE); % wykonanie operacji erozji
  61. %         disparityMapSE8= uint16(disparityMapSE); % konwersja mapy do uint8
  62.      
  63.         % odciecie disparityMap dla danego progu bez binaryzacji
  64.         disparityMap2 = disparityMapSE
  65.         disparityMap2(disparityMap2 < threshold) = 0;
  66.         figure;
  67.         imshow(disparityMap2, [0, 64])
  68.         title('XDD')
  69.         % progowanie mapy z binaryzacja oraz wykrycie 3 najwiekszych elementow
  70.        
  71.         disparityMapSEthresh = disparityMapSE > threshold;
  72.         disparityMapSEthresh = bwareafilt(disparityMapSEthresh, 3);
  73.      
  74.         % wymnozenie maski oraz mapy po odcieciu bez binaryzacji
  75.         disparityTEMP = immultiply(disparityMapSEthresh, disparityMap2)
  76.         figure;
  77.         imshow(disparityTEMP, [0, 64]);
  78.        
  79.  
  80.         pause(time);
  81.        
  82.         figure;
  83.         disparityMapSE2thresh = imdilate(disparityMapSEthresh, SE2); % dylatacja
  84.         imshow(disparityMapSE2thresh);
  85.         title('Disparity Map');
  86.         colorbar
  87.        
  88.         pause(time);
  89.        
  90.         figure;
  91.         imgToBB = im2bw(disparityMapSE2thresh) % ponowna konwersja do skali szarosci
  92.         imshow(frameLeft)
  93.         title('Wynik');
  94.         % poszukiwanie bialych regionow na mapie oraz zamykanie ich w
  95.         % prostokaty aby wskazac gdzie znajduje sie przeszkoda
  96.         measurements = regionprops(imgToBB, 'BoundingBox', 'Area');
  97.         for k = 1 : length(measurements)
  98.               thisBB = measurements(k).BoundingBox;
  99.               if(thisBB(3)*thisBB(4) > 10000) % odrzucenie najmniejszych wykryc
  100.                 rectangle('Position', [thisBB(1)+54,thisBB(2),thisBB(3)-54,thisBB(4)+20],...
  101.                 'EdgeColor','r','LineWidth',4 ) % rysowanie prosotkatu z przesunieciem
  102.                  %wyciecie zawartosci boundingboxa do obliczenia sredniej
  103.                  %wartosci pikseli
  104.                  J1 = imcrop(disparityMap2, [thisBB(1)+54, thisBB(2), thisBB(3)-54, thisBB(4)+20])
  105. %                wyciecie tla z boundinboxa
  106.                  Idx = J1 == 0
  107.                  % obliczenie sredniej wart pikseli bez czarnego tla
  108.                  Mean = uint8(mean(J1(~Idx)));
  109.                  
  110.                  % obliczenie wartosci odleglosci dzieki sredniej oraz
  111.                  % regresji liniowej
  112.                  odleglosc = (double(Mean) - 72.2439)/(-0.36463);
  113.                  disp(odleglosc)
  114.                  % dodanie napisu dla kazdego BB z odlegloscia
  115.                  
  116.                  string = strcat('~', num2str(ceil(odleglosc/10)*10), ' cm')
  117.                  text(thisBB(1)+54, thisBB(2)-15, string, 'Color', 'red', 'FontSize', 18)
  118.                  
  119.                  
  120.                  
  121.               end
  122.         end
  123. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement