Need help with Turbo product code
古いコメントを表示
I am trying to encode a grsy image using turbo product code but it's not working. The code I tried is below:
clc
clear
N = [127;255];
K = [120;239];
img = imread('pout.tif');
img = de2bi(img);
resized = imresize(img,[prod(K) 1]);
enc = tpcenc(resized,N,K);
enc = double(enc);
dec = tpcdec(enc,N,K);
op_img = reshape(dec,[],8);
op_img = op_img.';
op_img = reshape(2.^(0:7)*op_img,[],15);
op_img = imresize(op_img,[290 240]);
op_img = uint8(op_img);
figure();imshow(op_img)
Can you please guide me with this?
6 件のコメント
Jan
2021 年 5 月 6 日
You forgot to mention, what the problem is. Sharing this important detail is essential when you want to get your problem solved.
Are you sure you want to resize your image to a single column?
resized = imresize(img,[prod(K) 1]); % ?!?
Neeraj Chimwal
2021 年 5 月 7 日
Jan
2021 年 5 月 7 日
Then reshape is what you need, not imresize.
Neeraj Chimwal
2021 年 5 月 8 日
Jan
2021 年 5 月 8 日
imresize(img) canges the contents of the pixels by an interpolation. As far as I understand you only want to change the shape keeping the values of the pixels, so use: resized = img(:), which is an abbreviation for reshape(img, numel(img), 1).
Neeraj Chimwal
2021 年 5 月 8 日
回答 (1 件)
Walter Roberson
2021 年 5 月 6 日
編集済み: Walter Roberson
2021 年 5 月 6 日
img = de2bi(img);
That is something by 8, where the something is the number of elements in the original image.
resized = imresize(img,[prod(K) 1]);
image resizing happens in 2D, so you are collapsing all 8 bits per entry into a single bit, and interpolating to 28680 rows. Is it deliberate that you are doing something similar to thresholding down to one bit per entry when you imresize() the 8 bits down to one ??
op_img = reshape(dec,[],8);
... No, you got rid of the 8 bits per entry when you imresize()'d
Maybe you should be doing
resized = de2bi(reshape(imresize(img, K),[],1), 8)
9 件のコメント
Neeraj Chimwal
2021 年 5 月 7 日
Walter Roberson
2021 年 5 月 7 日
As Jan indicated, you should use reshape() not imresize()
Neeraj Chimwal
2021 年 5 月 8 日
Walter Roberson
2021 年 5 月 8 日
Well, what you should really be doing is breaking up the input signal into blocks of length K, and encoding each block and "send" the results concatenated together. Then on the "receiver", break up the received data, decode each part, and concatenate the results together.
Neeraj Chimwal
2021 年 5 月 13 日
Walter Roberson
2021 年 5 月 13 日
img_K = buffer(img(:), K);
if you have the Communications Systems Toolbox
Neeraj Chimwal
2021 年 5 月 14 日
filename = 'cameraman.tif';
N = [127;255];
K = [120;239];
pK = prod(K);
img = imread(filename);
imshow(img)
title('original')
%part 1 -- encoding
binimg8 = de2bi(img, 8).';
binimgK = buffer(binimg8(:), pK);
for J = size(binimgK,2) : -1 : 1 %reverse order for efficiency
enc(:,J) = tpcenc(binimgK(:,J),N,K);
end
%part 2 -- decoding
enc = double(enc);
for J = size(enc,2) : -1 : 1 %reverse order for efficiency
dec(:,J) = tpcdec(enc(:,J),N,K);
end
decimg8 = reshape(dec,8,[]) .';
op_img_dec = decimg8 * 2.^(0:7).';
op_img_dec = op_img_dec(1:numel(img)); %get rid of padding
op_img = uint8(reshape(op_img_dec, size(img)));
figure();
imshow(op_img)
title('reconstructed')
Neeraj Chimwal
2021 年 5 月 15 日
編集済み: Neeraj Chimwal
2021 年 5 月 15 日
カテゴリ
ヘルプ センター および File Exchange で Image Segmentation and Analysis についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


