Effacer les filtres
Effacer les filtres

Saving data as binary

28 vues (au cours des 30 derniers jours)
Adel Hafri
Adel Hafri le 14 Mai 2022
Commenté : Walter Roberson le 20 Mai 2022
Basically, i have for example k = [0 5 4], i want it to be saved as [0 101 100] instead of [00000000 00000101 00000100] so that it takes the least size possible, how can i do that ?

Réponses (2)

Voss
Voss le 14 Mai 2022
k = [0 5 4];
arrayfun(@(x)dec2bin(x,max(1,ceil(log2(x)))),k,'UniformOutput',false)
ans = 1×3 cell array
{'0'} {'101'} {'100'}
  11 commentaires
Adel Hafri
Adel Hafri le 15 Mai 2022
can you please go more into detail about how to use fwrite exactly ?
here is more explination what i wanna do exactly:
okay so i have a 750x750 jpeg pictures with values ranging from 0 to 255 and im supposed to apply losless image compression algorithms to reduce the size of those pictures, lossless image compression algorithms such as huffman work by reducing the length of frequent occuring symbols, for example if 150 was my most occuring then my huffman algorithm gives it the code 0 for example and so i ll be saving 7 bits times the frequncy of that data which means compression, the problem is matlab automatically makes that 1 bit length 0 into a 00000000 so essentialy, my algorithm is pointless since matlab will make all the data 8 bit length again, so i want a way to save data exactly the size i want, whether 1 bit,2bits.3....etc instead of it forcing all data to be 8bits
here is an example of how the algorithm changes the symbols
the picture i used isnt the best example of compression but you can get the idea
Walter Roberson
Walter Roberson le 20 Mai 2022
bits = {[1] [0 0] [1] [0 1 1] }
Bitstream = [bits{:}];
fid = fopen('test.bin','w');
fwrite(fid, Bitstream, 'bit1');
fclose(fid);

Connectez-vous pour commenter.


Ilya Dikariev
Ilya Dikariev le 20 Mai 2022
k_new=str2num(dec2bin(k))' would do. But if you want to still reduce the the size, just use dec2bin which keeps the data in char type which is 8 times smaller
  1 commentaire
Walter Roberson
Walter Roberson le 20 Mai 2022
Modifié(e) : Walter Roberson le 20 Mai 2022
only 4 times smaller. Each character needs 16 bits.
If you uint8(k_new) then that would need only one byte per value

Connectez-vous pour commenter.

Catégories

En savoir plus sur Denoising and Compression dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by