Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
452

Измерение пульса человека - портирование готового кода с Matlab

26.09.2013, 22:21. Показов 1347. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго настроения всем
Хочу портировать код с Matlab на JavaScript но не понимаю хорошо Matlab - то есть все спецыфические его особенности, очень прошу кто чем поможет хоть по пару строчек переведите на любой другой язык программирования как C or Java or JavaScript or C++

Помогите собрать алгоритм во едино, вот что успел:
TODO:
1. Конвертировать RGB кадр в YIQ rgb2ntfs - сделано
binomial Gaussian blur - Гаусовое размытие - сделано - но не из этих исходников
band passing(FFT) Полосный фильтр БПФ - есть в библиотеке DSP.js
amplify - усиление - позже
ntfs2rgb - позже
прорисовка на экране - есть

сейчас стараюсь понять в каком фиде и как именно данные с frame кадра были обработаны в FFT, и как этот код переписать обычными for(i=0...) без всяких repmat - к которым мне еще далеко - на JavaScript где в fft.forward([передается масив например со 256 значениями])

буду рад подсказкам и помощи

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
dataDir = './data';
vidFile = fullfile(dataDir,'face.mp4');
% compute Gaussian blur stack
disp('Spatial filtering...')
vid = VideoReader(vidFile);
% vid = videoinput('winvideo', 1);
alpha = 50;
samplingRate = 30;
chromAttenuation = 1;
fl = 50/60;
fh = 60/60;
level = 4;
startIndex = 1;
len = vid.NumberOfFrames;
endIndex = len-10;
 
% Extract video info
vidHeight = vid.Height;
vidWidth = vid.Width;
nChannels = 3;
temp = struct('cdata', zeros(vidHeight, vidWidth, nChannels, 'uint8'), 'colormap', []);
 
% firstFrame
temp.cdata = read(vid, startIndex);
[rgbframe, ~] = frame2im(temp);
rgbframe = im2double(rgbframe);
frame = rgb2ntsc(rgbframe);
 
blurred = blurDnClr(frame,level);
% create pyr stack
GDown_stack = zeros(endIndex - startIndex +1, size(blurred,1),size(blurred,2),size(blurred,3));
k = 1;
for i=startIndex+1:endIndex
    disp(k);
    k = k+1;
    temp.cdata = read(vid, i);
    [rgbframe,~] = frame2im(temp);
    rgbframe = im2double(rgbframe);
    frame = rgb2ntsc(rgbframe);
    blurred = blurDnClr(frame,level);
    GDown_stack(k,:,:,:) = blurred;
    filtered_stack = ideal_bandpassing(GDown_stack, 1, fl, fh, samplingRate);
    %% amplify
    filtered_stack(:,:,:,1) = filtered_stack(:,:,:,1) .* alpha;
    filtered_stack(:,:,:,2) = filtered_stack(:,:,:,2) .* alpha .* chromAttenuation;
    filtered_stack(:,:,:,3) = filtered_stack(:,:,:,3) .* alpha .* chromAttenuation;
    
    filtered = squeeze(filtered_stack(k,:,:,:));
    filtered = imresize(filtered,[vidHeight vidWidth]);
    filtered = filtered+frame;
    filtered = ntsc2rgb(filtered);
%     imshow(blurred, 'InitialMagnification',800);
    imshow(blurred);
    drawnow;
end
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function filtered = ideal_bandpassing(input, dim, wl, wh, samplingRate)
    if (dim > size(size(input),2))
        error('Exceed maximum dimension');
    end
    input_shifted = shiftdim(input,dim-1);
    Dimensions = size(input_shifted);
    n = Dimensions(1);
    dn = size(Dimensions,2);
    Freq = 1:n;
    Freq = (Freq-1)/n*samplingRate;
    mask = Freq > wl & Freq < wh;
    Dimensions(1) = 1;
    mask = mask(:);
    mask = repmat(mask, Dimensions);
    F = fft(input_shifted,[],1);
    F(~mask) = 0;
    filtered = real(ifft(F,[],1));
    filtered = shiftdim(filtered,dn-(dim-1));
end
дополнительная информация
http://people.csail.mit.edu/mrub/vidmag/
исходные коды
http://people.csail.mit.edu/mr... ab-1.1.zip
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2013, 22:21
Ответы с готовыми решениями:

Измерение пульса камерой телефона
Кто нибудь, знаком с алгоритмом измерения пульса с помощью камеры мобильного телефона, подобном, например, в программе Cardiograph?...

Портирование из Mathcad в Matlab
Ребят, кто-нибудь может, пожалуйста, конвертировать программу(во вложении) в матлаб из маткада?

Портирование кода с С# на С++
Доброго времени суток! Помогите, пожалуйста, перевести на с++ такой код(желательно очень близко к оригиналу!!!): using System; using...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2013, 22:21
Помогаю со студенческими работами здесь

Портирование кода
Добрый день, часто вижу, что при портировании кода с ПК версии до мобильной версии, вставляют &quot;костыли&quot; #ifdef...

Портирование кода с c++ на c#
Добрый день! Помогите, пожалуйста, перевести на с# такой код#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;conio.h&gt; ...

Портирование кода Java в C#
Здравствуйте! Помогите, пожалуйста, разобраться с частью кода. Почти весь код портировал, но выводит 3 ошибки. Не понимаю, как в C#...

Портирование кода с с++ на java
Подскажите почему функции дают разный результат? данные uint32_t key={0x699364AA,0x783DD4BB,0x105098CC,0xA85564DD}; unsigned char...

Портирование кода с C# в Delphi
Здравствуйте. Решил переписать кое что на Delphi. Вроде все правильно переписал, даже для удобства создал свой класс аналог...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru