Saving a Bilevel - or Binary Image

Hello,
I am creating a black and white movie in my code. I create a 4 dimensional matrix of zeros. Each number in the matrix is a uint8. This is the problem.
B = zeros(X, Y, 1, NumberOfFrames);
B = uint8(B);
All I want to save is a 1 and a 0. By doing a unit8 I add 7 extra bits to each pixel. This is over a 25 minute mov file!! How can I save the information using less memory? Is there for example an:
B = binary(B);
Command?
Thanks!

回答(2 个)

B = false(X, Y, 1, NumberOfFrames); %casts as logical (1bit)
or
B = logical(B); %for something already in black and white but not 1bit
B = zeros(X, Y, 1, NumberOfFrames);
B = logical(B);
is what you are looking for. More info here: Logical Types

3 个评论

This wastes all sorts of memory on the preallocation of B in class double (64bit) which is then immediately truncated to binary (1bit). Don't do this!
Yes, I know, I used the Repmat function to duplicate the logical value.
Sean, the code provided above is by no means meant to be "best practice" or the "best way" to do something. I was simply working off the code that "justthebasics" provided. The key was to make him aware of the LOGICAL function.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Logical 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by