Advertisement
pabloducato

Find_13_Key_Model

Dec 1st, 2018
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.55 KB | None | 0 0
  1. %Funkcja znajdująca dźwięk wskazywany na wirtualnej klawiaturze z wykorzystaniem modelu barwy obiektu.
  2. %
  3. %   dzwiek = ZnajdzKlawisz13model(obraz, model, szer_wsk)
  4. %
  5. %obraz - obraz z wirtualną klawiaturą i obiektem wskazującym klawisz,
  6. %model - model barwy obiektu (wskaźnika),
  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 = ZnajdzKlawisz13model(obraz, model, szer_wsk)
  17.  
  18. dzwiek = '   ';
  19. obrazBW = bwmorph(ZnajdzObiekt(obraz, model),'dilate');
  20. %figure(3); imshow(obrazBW); title('Wykryty obiekt');
  21.  
  22. palec = bwdist(1-obrazBW);
  23. figure(3); imagesc(palec);
  24. [maxw, imaxw] = max(palec);
  25. [maxk, imaxk] = max(maxw);
  26. if imaxk == 1,
  27.     return;
  28. end;
  29. if imaxk == size(obraz, 2),
  30.     imaxk = imaxk-1;
  31. end;
  32.  
  33. if size(obraz, 2) == 320,
  34.     w0is = size(obraz, 1) - 80;
  35.     w1is = size(obraz, 1) - 36;
  36.     polszis = 14;
  37. elseif size(obraz, 2) == 160,
  38.     w0is = size(obraz, 1) - 40;
  39.     w1is = size(obraz, 1) - 18;
  40.     polszer = 7;
  41. else
  42.     error('Nieznana klawiatura');
  43. end;
  44.    
  45. if imaxw(imaxk) < w0is,
  46.     return;
  47. end;
  48. %Klaw13 =  ['C  ';'Cis';'D  ';'Dis';'E  ';'F  ';'Fis';'G  ';'Gis';'A  ';'Ais';'H  ';'C  '];
  49. Klaw8 = ['C  ';'D  ';'E  ';'F  ';'G  ';'A  ';'H  ';'C2 '];
  50. maska_isow = [1 1 0 1 1 1 0 0];
  51.  
  52. szerokosc_klawisza = size(obraz, 2)/8;
  53. if szer_wsk <= 0,
  54.     szer_wsk = szerokosc_klawisza/10;
  55. end;
  56. if maxk >= szer_wsk/2,
  57.     klawisz = floor(imaxk/szerokosc_klawisza);
  58.     if imaxw(imaxk) <= w1is && imaxw(imaxk) >= w0is,
  59.         dklawisz = rem(imaxk, szerokosc_klawisza);
  60.         if dklawisz <= szerokosc_klawisza/3,
  61.             if klawisz > 0
  62.                 if maska_isow(klawisz) == 1,
  63.                     dzwiek = [deblank(Klaw8(klawisz)) 'is'];
  64.                 end;
  65.             else
  66.                 dzwiek = Klaw8(klawisz+1);
  67.             end;
  68.         elseif dklawisz >= 2*szerokosc_klawisza/3,
  69.             if maska_isow(klawisz+1) == 1,
  70.                 dzwiek = [deblank(Klaw8(klawisz+1)) 'is'];
  71.             else
  72.                 dzwiek = Klaw8(klawisz+1);
  73.             end;
  74.         else
  75.             dzwiek = Klaw8(klawisz+1,:);
  76.         end;
  77.     else
  78.         dzwiek = Klaw8(klawisz+1,:);
  79.     end
  80.     disp([dzwiek '(' num2str(klawisz) '): [' num2str(imaxk) ', ' num2str(imaxw(imaxk)) ']; ' ]);
  81.     disp(['Maksymalna odleglosc od tla: ' num2str(maxk)]);
  82. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement