tôi có mã matlab này để hiển thị đối tượng hình ảnh sau khi làm siêu phổ (stft, cặp vợ chồng plca ...)Armadillo porting imagesc để lưu hình ảnh bitmap từ ma trận
t = z2 *stft_options.hop/stft_options.sr;
f = stft_options.sr*[0:size(spec_t,1)-1]/stft_options.N/1000;
max_val = max(max(db(abs(spec_t))));
imagesc(t, f, db(abs(spec_t)),[max_val-60 max_val]);
Và có được kết quả này:
tôi đã porting C++ thành công bằng cách sử dụng Armadillo lib và có được kết quả mat:
mat f,t,spec_t;
Vấn đề là tôi không có ý tưởng để chuyển đổi bitmap như imagesc trong MATLAB.
tôi đã tìm kiếm và tìm thấy this answer, nhưng dường như nó không hoạt động trong trường hợp của tôi bởi vì:
- tôi sử dụng một ma trận đôi thay vì ma trận số nguyên, mà không thể được đánh dấu như màu bitmap
- phương pháp
imagesc
mất 4 thông số, trong đó có giới hạn với vectơ x và y - phương pháp
imagesc
cũng hỗ trợ quy mô (tôi thực sự không biết làm thế nào cho nó hoạt động)
Có ai có bất cứ đề nghị nào không?
Cập nhật: Đây là kết quả của phương pháp save
trong Armadillo. Nó không giống như hình ảnh phổ trên. Tôi có nhớ điều gì không?
spec_t.save("spec_t.png", pgm_binary);
Cập nhật 2: lưu ảnh phổ với db
và abs
mat spec_t_mag = db(abs(spec_t)); // where db method: m = 10 * log10(m);
mag_spec_t.save("mag_spec_t.png", pgm_binary);
Và kết quả:
Đối với ma trận 'double', bạn có thể làm như' imagesc' hoặc nhiều chức năng đồ họa Matlab khác: Dự đoán phạm vi giá trị ma trận của bạn thành một bản đồ màu được làm bằng số nguyên. Xem tài liệu Matlab về [màu được lập chỉ mục] (http://uk.mathworks.com/help/releases/R2015a/matlab/ref/graphics_i12.gif), trong tài liệu 'imagesc'. Đó là một bài tập mở rộng đơn giản. – Hoki