вейвлет-разложение вектора

Если у меня есть гиперспектральный куб данных размера «m x n x p», где m - размер строки, n - размер столбца, а p - общее количество полос.

Обозначим куб гиперспектральных данных A. В этом случае каждый пиксель A соответствует вектору размером p x 1.

Хорошо, чтобы построить пиксель из A, мы можем сделать это:

specific_pixel = squeeze(A(x,y,:)); % Extracting a pixel located in the position x and y of A
plot(specific_pixel), ylabel('The specific pixel');

У меня два вопроса:

1) Я знаю, как построить каждый пиксель отдельно, как указано выше, но как я могу одновременно создать график всех пикселей? например, если у нас есть 2D-изображение, мы можем просто написать plot (image). Но как мы можем это сделать для куба данных?

2) Если я применяю одномерный вейвлет из 3 уровней к указанному выше пикселю:

[c,s] = wavedec(A, 3, 'haar');
approxi = appcoef(c, s, 'haar', 3);
details3 = detcoef(c, s, 3);
details2 = detcoef(c, s, 2);
details1 = detcoef(c, s, 1);

Как я могу построить конкатенацию приблизительно и трех деталей ??

Любая помощь будет очень признательна.


person Christina    schedule 13.05.2015    source источник


Ответы (1)


Если я вас правильно понял, вы хотите построить 3D-данные. Вы можете использовать scatter3 или _ 2_, чтобы добиться желаемого.

С plot3 выполните:

plot(A(:,:,1), A(:,:,2), A(:,:,3), 'b.', 'MarkerSize', 10);

С scatter3 выполните:

scatter3(A(:,:,1), A(:,:,2), A(:,:,3), 10, 'b');

Приведенный выше код отображает каждую точку в трехмерном пространстве размером 10 и синим цветом.

Что касается второго вопроса, предполагая, что вывод также является трехмерным, вы можете объединить кубы по горизонтали с помощью _ 7_, затем повторите приведенный выше код.

Что-то вроде этого:

out = cat(2, approxi, details1, details2, details3);

plot(out(:,:,1), out(:,:,2), out(:,:,3), 'b.', 'MarkerSize', 10);
%// or
%// scatter3(out(:,:,1), out(:,:,2), out(:,:,3), 10, 'b');

Параметр 2 в cat конкатенируется по горизонтали, поэтому вы будете соединять 4 куба вместе по горизонтали, но при этом сохраняете то же количество измерений в третьем измерении, а затем просто строите их все одновременно.

person rayryeng    schedule 13.05.2015
comment
Спасибо за ваш ответ. Я очень ценил это - person Christina; 14.05.2015
comment
Возможно, я неверно истолковал ваш вопрос. Если я дал мне знать, но если это действительно ответ на ваш вопрос, подумайте о том, чтобы принять мой ответ. Удачи! - person rayryeng; 14.05.2015
comment
Здравствуйте, конечно, я приму ваш ответ, но мне просто потребовалось несколько часов, чтобы попытаться исправить некоторые ошибки, но я не могу найти решение самостоятельно. На самом деле я читаю эту статью: arxiv.org/ftp/arxiv/papers/ 1201 / 1201.2025.pdf, на странице 4 они упомянули, что сигнал DWT может быть получен путем объединения всех коэффициентов. - person Christina; 14.05.2015
comment
Предположим, что у меня есть вектор p размера «126 x 1». Я применил трехуровневую декомпозицию, используя daubechies16 (db16): $ [c, s] = wavedec (p, 3, 'db16'); a3 = appcoef (c, s, 'db16', 3); d3 = detcoef (c, s, 3); d2 = detcoef (c, s, 2); d1 = detcoef (c, s, 1); p2 = cat (1, a3, d3, d2, d1); $ - person Christina; 14.05.2015
comment
К сожалению, график p2 не дает мне сигнала размером 126 x 1, как то, что они сделали в статье. Что я сделал неправильным в своем коде? - person Christina; 14.05.2015
comment
@Christina - Дай мне разобраться и вернуться к тебе. Спасибо, что приняли мой ответ, хотя то, что я написал, было неправильным! - person rayryeng; 15.05.2015
comment
Большое спасибо за уделенное время. Тоже пытаюсь решить проблему :) - person Christina; 15.05.2015
comment
И, пожалуйста, можете ли вы мне помочь здесь: D stackoverflow.com/ questions / 30211461 / plotting-the-roc-curve - person Christina; 15.05.2015