📄 bpcs.m
字号:
% Bit Plane Complexity Segmentation watermarking
% Input: 512x512 3 channel TIFF
% Output: 512x512 3 channel watermarked image
function lena3 = bpcs(filename)
preprocess;
lena = imread(filename);
img_size = size(lena,1);
lena2 = double(lena);
img_size = size(lena2, 1);
% separate into color channels
lena_r = lena2(:,:,1);
lena_g = lena2(:,:,2);
lena_b = lena2(:,:,3);
% convert each plane into gray code
%lena_r_gc = dec2gray(lena_r(:,:));
% separate into bit planes (1 is msb, 8 is lsb)
% profile on -detail builtin
lena_r_gc = zeros(img_size,img_size,8);
lena_g_gc = zeros(img_size,img_size,8);
lena_b_gc = zeros(img_size,img_size,8);
for i=1:img_size
for j=1:img_size
if lena_r(i,j) ~= 0
temp = dec2gray(lena_r(i,j),:);
lena_r_gc(i,j,1) = temp(1);
lena_r_gc(i,j,2) = temp(2);
lena_r_gc(i,j,3) = temp(3);
lena_r_gc(i,j,4) = temp(4);
lena_r_gc(i,j,5) = temp(5);
lena_r_gc(i,j,6) = temp(6);
lena_r_gc(i,j,7) = temp(7);
lena_r_gc(i,j,8) = temp(8);
end
if lena_g(i,j) ~= 0
temp = dec2gray(lena_g(i,j),:);
lena_g_gc(i,j,1) = temp(1);
lena_g_gc(i,j,2) = temp(2);
lena_g_gc(i,j,3) = temp(3);
lena_g_gc(i,j,4) = temp(4);
lena_g_gc(i,j,5) = temp(5);
lena_g_gc(i,j,6) = temp(6);
lena_g_gc(i,j,7) = temp(7);
lena_g_gc(i,j,8) = temp(8);
end
if lena_g(i,j) ~= 0
temp = dec2gray(lena_b(i,j),:);
lena_b_gc(i,j,1) = temp(1);
lena_b_gc(i,j,2) = temp(2);
lena_b_gc(i,j,3) = temp(3);
lena_b_gc(i,j,4) = temp(4);
lena_b_gc(i,j,5) = temp(5);
lena_b_gc(i,j,6) = temp(6);
lena_b_gc(i,j,7) = temp(7);
lena_b_gc(i,j,8) = temp(8);
end
end
if mod(i,10)==0
i
end
end
disp('finished separating bitplanes');
% measure each tile's complexity
threshold = .30;
total = zeros(1,8);
length = 8;
max = 2 * length * (length-1);
for i=0:(img_size/length)-1
i_start = (i*length)+1;
i_fin = (i*length)+length;
for j=0:(img_size/length)-1
j_start = (j*length)+1;
j_fin = (j*length)+length;
for k=1:8
if complexity(lena_r_gc(i_start:i_fin, j_start:j_fin, k), length, max) > threshold
lena_r_gc(i_start:i_fin, j_start:j_fin, k) = round(rand(length));
total(k) = total(k)+1;
end
if complexity(lena_g_gc(i_start:i_fin, j_start:j_fin, k), length, max) > threshold
lena_g_gc(i_start:i_fin, j_start:j_fin, k) = round(rand(length));
total(k) = total(k)+1;
end
if complexity(lena_b_gc(i_start:i_fin, j_start:j_fin, k), length, max) > threshold
lena_b_gc(i_start:i_fin, j_start:j_fin, k) = round(rand(length));
total(k) = total(k)+1;
end
end
end
i
end
sprintf('# blocks: %d, # bits: %d (%f%%)\n', sum(total), length*length*sum(total), (length*length*sum(total))/(img_size*img_size*8*3))
% concatenate bit planes
clear lena3;
lena3(:,:,1) = lena_r_gc(:,:,1)*128 + ...
lena_r_gc(:,:,2)*64 + ...
lena_r_gc(:,:,3)*32 + ...
lena_r_gc(:,:,4)*16 + ...
lena_r_gc(:,:,5)*8 + ...
lena_r_gc(:,:,6)*4 + ...
lena_r_gc(:,:,7)*2 + ...
lena_r_gc(:,:,8)*1;
lena3(:,:,2) = lena_g_gc(:,:,1)*128 + ...
lena_g_gc(:,:,2)*64 + ...
lena_g_gc(:,:,3)*32 + ...
lena_g_gc(:,:,4)*16 + ...
lena_g_gc(:,:,5)*8 + ...
lena_g_gc(:,:,6)*4 + ...
lena_g_gc(:,:,7)*2 + ...
lena_g_gc(:,:,8)*1;
lena3(:,:,3) = lena_b_gc(:,:,1)*128 + ...
lena_b_gc(:,:,2)*64 + ...
lena_b_gc(:,:,3)*32 + ...
lena_b_gc(:,:,4)*16 + ...
lena_b_gc(:,:,5)*8 + ...
lena_b_gc(:,:,6)*4 + ...
lena_b_gc(:,:,7)*2 + ...
lena_b_gc(:,:,8)*1;
%lena3(:,:,1) = gray2dec(lena3(find(lena3(:,:,1))));
%lena3(:,:,1) = max(0, gray2dec(lena3(:,:,1)));
for i=1:img_size
for j=1:img_size
if lena3(i,j,1) > 0
lena3(i,j,1) = gray2dec(lena3(i,j,1));
end
if lena3(i,j,2) > 0
lena3(i,j,2) = gray2dec(lena3(i,j,2));
end
if lena3(i,j,3) > 0
lena3(i,j,3) = gray2dec(lena3(i,j,3));
end
end
end
%profile viewer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -