bitget function is not invoking output bits in a vector

조회 수: 6 (최근 30일)
Anmar Mohammed
Anmar Mohammed 2018년 11월 26일
편집: Anmar Mohammed 2018년 11월 26일
k=k+1; %% k is counter and its chainging even more than (length(A))
for t = 1:1:length(A) %% A is a vector contains 8 elements
recovered_bits(1,k)= bitget(A(1,t),1); % extract LSB of each element in array and put them (LSB) in recovered_bits vector
k=k+1;
end
%% Output ----> recovered_bits = [] knowing that i trying to preallocate the vector previously
  댓글 수: 3
madhan ravi
madhan ravi 2018년 11월 26일
편집: madhan ravi 2018년 11월 26일
See PREALLOCATION it improves code efficiency
Anmar Mohammed
Anmar Mohammed 2018년 11월 26일
A is a vector contain 8 pixels consider it double

댓글을 달려면 로그인하십시오.

채택된 답변

madhan ravi
madhan ravi 2018년 11월 26일
편집: madhan ravi 2018년 11월 26일
You don't need a counter for this case , please pre-allocate before loop!
recovered_bits=cell(1,length(A)); %proper pre-allocation
for t = 1:length(A)
recovered_bits{t}= bitget(A(1,t),1);
end
[recovered_bits{:}]
  댓글 수: 2
Anmar Mohammed
Anmar Mohammed 2018년 11월 26일
편집: Anmar Mohammed 2018년 11월 26일
Thanks for sharing, it really helped, the k is needed simply because the code above is invoked in a bigger problem within functions, thank you all for helping me, greetings.
madhan ravi
madhan ravi 2018년 11월 26일
Anytime :), see Steven Lords answer which is the efficient way to do what you are doing

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Steven Lord
Steven Lord 2018년 11월 26일
Why loop?
r = randi([0 intmax('int8')], 8, 1, 'int8');
recovered_bits = bitget(r, 1);
result = [r, recovered_bits, mod(r, 2)]
The second and third columns of result should be the same.
  댓글 수: 1
Anmar Mohammed
Anmar Mohammed 2018년 11월 26일
편집: Anmar Mohammed 2018년 11월 26일
hi, am working on image steganography.. i used loop because i needed the first LSB or i may need the second or the third LSBs.. the output depend on other parameters with entire recieved image.. your code is intersting i tried to have the fist 3 LSBs using your modified code but an error ocured concerning input size, any suggestions are much preciated, thanks in advance.
r = randi([0 intmax('uint8')], 8, 1, 'uint8');
recovered_bits = bitget(r, 1:3,'uint8');
result = [r, recovered_bits]
Error using bitget
Inputs must have the same size.

댓글을 달려면 로그인하십시오.


KALYAN ACHARJYA
KALYAN ACHARJYA 2018년 11월 26일
편집: KALYAN ACHARJYA 2018년 11월 26일
Initiallize k=1, otherwise K is not defined
k=1; %% k is counter and its chainging even more than (length(A))
for t = 1:1:length(A) %% A is a vector contains 8 elements
recovered_bits(1,k)= bitget(A(1,t),1); % extract LSB of each element in array and put them (LSB) in recovered_bits vector
k=k+1;
end
  댓글 수: 2
KALYAN ACHARJYA
KALYAN ACHARJYA 2018년 11월 26일
편집: KALYAN ACHARJYA 2018년 11월 26일
For example I have choosen different A
A=[4 6 7 4 3 0 8 4];
for t=1:1:length(A) %% A is a vector contains 8 elements
recovered_bits(t)=bitget(A(1,t),1); % extract LSB of each element in array and put them (LSB) in recovered_bits vector
end
%% Output ----> recovered_bits = [] knowing that i trying to preallocate the vector previously
disp(recovered_bits);
Anmar Mohammed
Anmar Mohammed 2018년 11월 26일
Oh.. am sorry it's already initialized and its K=1 not K=k+1 as wrote above, my bad.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Desktop에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by