⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpcs.m

📁 Watermarking algorithms built using matlab
💻 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 + -