pabloducato

Find_13_Key_Background

Dec 1st, 2018
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.75 KB | None | 0 0
  1. %Funkcja znajdująca dźwięk wskazywany na wirtualnej klawiaturze z wykorzystaniem metody odejmowania tła.
  2. %
  3. %   dzwiek = ZnajdzKlawisz13tlo(obraz, obraz_tlo, szer_wsk)
  4. %
  5. %obraz - obraz z wirtualną klawiaturą i obiektem wskazującym klawisz,
  6. %obraz_tlo - obraz tła,
  7. %szer_wsk - szerokość wskaźnika w pikselach; jeżeli <= 0 to wartość
  8. %           parametru wyliczna jest automatycznie
  9. %
  10. %dzwiek - dźwięk przypisany wskazywanemu klawiszowi.
  11. %
  12. %UWAGA:
  13. %Jeżeli żaden z klawiszy nie jest aktualnie wskazywany, w zmiennej 'dzwiek'
  14. %znajduje się pusty napis (3 spacje).
  15. %
  16. function dzwiek = ZnajdzKlawisz13tlo(obraz, obraz_tlo, szer_wsk)
  17.  
  18. dzwiek = '   ';
  19. obraz_r = rgb2gray(imabsdiff(obraz, obraz_tlo));
  20. obraz_rBW = im2bw(obraz_r, graythresh(obraz_r));
  21.  
  22. %palec_labeled = bwlabel(obraz_rBW);
  23. palec = bwdist(1-obraz_rBW);
  24. figure(3); imagesc(palec);
  25. [maxw, imaxw] = max(palec);
  26. [maxk, imaxk] = max(maxw);
  27. if imaxk == 1,
  28.     return;
  29. end;
  30. if imaxk == size(obraz, 2),
  31.     imaxk = imaxk-1;
  32. end;
  33. if size(obraz, 2) == 320,
  34.     w0is = size(obraz, 1) - 80;
  35. elseif size(obraz, 2) == 160,
  36.     w0is = size(obraz, 1) - 40;
  37. else
  38.     error('Nieznana klawiatura');
  39. end;
  40. if imaxw(imaxk) < w0is,
  41.     return;
  42. end;
  43.  
  44. if size(obraz, 2) == 320,
  45.     w0is = size(obraz, 1) - 80;
  46.     w1is = size(obraz, 1) - 36;
  47.     polszis = 14;
  48. elseif size(obraz, 2) == 160,
  49.     w0is = size(obraz, 1) - 40;
  50.     w1is = size(obraz, 1) - 18;
  51.     polszer = 7;
  52. end;
  53.    
  54. %Klaw13 =  ['C  ';'Cis';'D  ';'Dis';'E  ';'F  ';'Fis';'G  ';'Gis';'A  ';'Ais';'H  ';'C  '];
  55. Klaw8 = ['C  ';'D  ';'E  ';'F  ';'G  ';'A  ';'H  ';'C2 '];
  56. %disp(['Maksymalna odleglosc od tla: ' num2str(maxk)]);
  57. maska_isow = [1 1 0 1 1 1 0 0];
  58.  
  59. szerokosc_klawisza = size(obraz, 2)/8;
  60. if szer_wsk <= 0,
  61.     szer_wsk = szerokosc_klawisza/10;
  62. end;
  63. if maxk >= szer_wsk/2,
  64.     klawisz = floor(imaxk/szerokosc_klawisza);
  65.     if imaxw(imaxk) <= w1is && imaxw(imaxk) >= w0is,
  66.         dklawisz = rem(imaxk, szerokosc_klawisza);
  67.         if dklawisz <= szerokosc_klawisza/3,
  68.             if klawisz > 0
  69.                 if maska_isow(klawisz) == 1,
  70.                     dzwiek = [deblank(Klaw8(klawisz)) 'is'];
  71.                 end;
  72.             else
  73.                 dzwiek = Klaw8(klawisz+1);
  74.             end;
  75.         elseif dklawisz >= 2*szerokosc_klawisza/3,
  76.             if maska_isow(klawisz+1) == 1,
  77.                 dzwiek = [deblank(Klaw8(klawisz+1)) 'is'];
  78.             else
  79.                 dzwiek = Klaw8(klawisz+1);
  80.             end;
  81.         else
  82.             dzwiek = Klaw8(klawisz+1,:);
  83.         end;
  84.     else
  85.         dzwiek = Klaw8(klawisz+1,:);
  86.     end
  87.     disp([dzwiek '(' num2str(klawisz) '): [' num2str(imaxk) ', ' num2str(imaxw(imaxk)) ']; ' ]);
  88.     disp(['Maksymalna odleglosc od tla: ' num2str(maxk)]);
  89. end;
Add Comment
Please, Sign In to add comment