精华内容
下载资源
问答
  • 信息隐藏,LSB隐写 matlab代码

    热门讨论 2013-05-18 23:49:24
    信息隐藏 LSB隐写,抗卡方攻击 matlab代码
  • 信息隐藏MATLAB代码

    2015-03-24 21:16:39
    本文件功能:实现信息隐藏,并在高斯信道上传输 具体过程:对秘密信息先进行伪随机加扰并进行31-21bch纠错编码,而后进行映射编码成错误样图。然后将错误样图数量接在载体后便于接收端解出嵌入位置,对载体15-11汉明...
  • 使用直接4bit替换法:以载体图像的各像素最低4位比特位作为冗余空间,将秘密图像的高4bit作为秘密信息嵌入载体。
  • 图像隐藏 matlab 代码

    2010-11-29 12:47:53
    可将载有隐藏信息的六张黑白图片叠加到一张彩色图片中,使肉眼无法辨别,用于文件加密。具体使用方法,详见程序。
  • matlab 信息隐藏中对数据进行随机置乱处理,包涵2种基本方法和比较算法,实现比较简单。
  • 这是一个往图片中添加隐藏信息以及从图片中提取出隐藏信息的matlab程序代码 这是一个往图片中添加隐藏信息以及从图片中提取出隐藏信息的matlab程序代码
  • MATLAB实验代码

    2017-11-23 19:00:52
    以一幅Lenna128*128大小的灰度图像为载体,在其中隐藏二值序列。(程序中关键程序段或者语句要加注释)  实现以下功能:  1.以自己的名字或者学号等个人信息生成一个64*64的序列;  2.算法(1)将序列隐藏于图像的...
  • MATLAB实现的一个图像信息隐藏检测算法,可以检测jpeg图像隐藏的信息
  • <基于预测误差分类置乱的图像加密域可逆信息隐藏>论文代码
  • 信息隐藏里面的patchwork算法,用matlab实现,算法比较简单易懂,一看就明白。
  • LSB (LSB:least significant bits) :将信息嵌入到...优点:操作简单,实现容易,隐藏信息量相对比较大。 缺点:由于使用了图像不重要的像素位,算法的鲁棒性差,隐写信息很容易为滤波、图像量化、几何变形的操作破坏。
  • 收集的一个基于lsb算法,调用图片并在图片中隐藏一段message,然后检测这段message
  • MATLAB_LSB_隐藏水印和提取,附代码-附件资源
  • 2、 顺序法和随机法信息隐藏位置分布     CODE lsbord.m(顺序法嵌入) function hideimg=lsbord(imgfile,info,outfile) %读取载体图像 img=imread(imgfile); %转灰度图像 if ndims(img)==3

    COMMAMD


    1、顺序法和随机法的嵌入、提取、lsb图像对比显示

     MATLAB__LSB信息隐藏与提取


    MATLAB__LSB信息隐藏与提取

    MATLAB__LSB信息隐藏与提取

     

    2、顺序法和随机法信息隐藏位置分布

    MATLAB__LSB信息隐藏与提取

     MATLAB__LSB信息隐藏与提取  MATLAB__LSB信息隐藏与提取


      

    CODE


    lsbord.m(顺序法嵌入)
    function hideimg=lsbord(imgfile,info,outfile)
    %读取载体图像
    img=imread(imgfile);
    %转灰度图像
    if ndims(img)==3
        img=rgb2gray(img);
    end
    %读取待嵌入信息
    fo=fopen(info,'r');
    [msg,len]=fread(fo,'ubit1');
    [m,n]=size(img);
    %检查嵌入信息长度是否合法
    if m*n
        error('wrong!');
    end
    %顺序循环嵌入隐藏信息
    hideimg=img;
    for i=1:m
        for j=1:n
           if (i-1)*n+j>len
              break
           end
           if bitand(hideimg(i,j),1)==msg((i-1)*n+j)
              continue
           else
               ifmsg((i-1)*n+j)==1
                 hideimg(i,j)=hideimg(i,j)+1;
               else
                 hideimg(i,j)=hideimg(i,j)-1;
           end
        end
    end
    imwrite(hideimg,outfile);
    end

    lsbextraxt_ord.m(顺序法提取)
    function msg=lsbextract_ord(hideimg,len,outfile)
    %读取待提取图像
    img=imread(hideimg);
    [m,n]=size(img);
    %判断想提取的信息长度是否合法
    if len>m*n
        error('wrong!');
    end
    %初始化缓冲变量
    msg=zeros(1,len);
    %顺序循环读取隐藏信息到缓冲变量
    for i=1:m
        for j=1:n
           if (i-1)*n+j>len
              break
           end
           msg(1,(i-1)*n+j)=bitand(img(i,j),1);
        end
    end
    %将信息从缓冲变量写入文件
    fi=fopen(outfile,'w');
    fwrite(fi,msg,'ubit1');
    fclose(fi);
    end


    lsbrand.m(随机法嵌入)
    function hideimg=lsbrand(imgfile,info,key,outfile)
    %读取载体图像
    img=imread(imgfile);
    %转灰度图像
    if ndims(img)==3
        img=rgb2gray(img);
    end
    %读取嵌入信息
    fi=fopen(info,'r');
    [msg,len]=fread(fi,'ubit1');
    [m,n]=size(img);
    %检查嵌入信息是否合法
    if len>m*n
        error('wrong!');
    end
    %生成随机序列对
    [x,y]=randxy(img,len,key);
    %嵌入隐藏信息
    hideimg=img;
    for i=1:len
        ifbitand(hideimg(x(i),y(1,i)),1)==msg(i)
           continue
        else
           if msg(i)==1
              hideimg(x(i),y(i))=hideimg(x(i),y(i))+1;
           else
              hideimg(x(i),y(i))=hideimg(x(i),y(i))-1;
           end
        end
    end
    imwrite(hideimg,outfile);
    end

    randxy.m(生成随机序列对)
    function [x,y]=randxy(matrix,len,key)
    %计算步长,两个步长随机交替,确保插入的随机性
    [m,n]=size(matrix);
    step1=floor(m*n/len)+1;
    step2=step1-3;
    if step2<=0
        error('wrong!');
    end
    %设置随机种子,生成一串随机数
    rand('seed',key);
    temp=rand(1,len);
    %根据随机数计算随机序列对(x,y)
    locate=1;
    x=zeros(1,len);
    y=zeros(1,len);
    x(1,1)=locate;
    y(1,1)=locate;
    for i=2:len
        if temp(i)>0.5
           locate=locate+step1;
        else
           locate=locate+step2;
        end
       x(1,i)=floor(locate/n)+1;
        ifmod(locate,n)==0
           y(1,i)=n;
        else
           y(1,i)=mod(locate,n);
        end
    end
    end

    lsbextract_rand.m(随机法提取)
    function msg=lsbextract_rand(hideimg,len,key,outfile)
    %读取待提取图像
    img=imread(hideimg);
    [m,n]=size(img);
    %判断想提取的信息长度是否合法
    if len>m*n
        error('wrong!');
    end
    %还原随机序列对,确定提取位置
    [x,y]=randxy(img,len,key);
    %初始化缓冲变量
    msg=zeros(1,len);
    %根据序列对提取隐藏信息
    for i=1:len
       msg(i)=bitand(img(x(i),y(i)),1)
    %将提取的信息写入文件
    fi=fopen(outfile,'w');
    fwrite(fi,msg,'ubit1');
    fclose(fi);
     end

    compare.m(lsb图像信息隐藏位置显示)
    function test=compare(original,lsb)
    %读取两幅图像
    img1=imread(original);
    img2=imread(lsb);
    %double类型转换
    img1=double(img1)/255;
    img2=double(img2)/255;
    %差值二值化显示
    test=img2-img1;
    imshow(mat2gray(test));
    end






    展开全文
  • 一个信息隐藏的程序,王丽娜的代码!感觉不错!
  • MATLAB_LSB_隐藏水印和提取,附代码

    千次阅读 多人点赞 2018-10-28 00:27:54
    MATLAB_LSB_隐藏水印和提取,附代码 对图像的认识 ​ 图片是一个点阵图像,在屏幕上显示是RGB模式,打印模式为CMYK(彩色印刷) ​ 图片格式分为很多种:bmp(无压缩的格式), jpg(经过压缩的格式),png。 ​ 一般的...

    MATLAB_LSB_隐藏水印和提取,附代码

    对图像的认识

    ​ 图片是一个点阵图像,在屏幕上显示是RGB模式,打印模式为CMYK(彩色印刷)

    ​ 图片格式分为很多种:bmp(无压缩的格式), jpg(经过压缩的格式),png。

    ​ 一般的彩色图片,每个像素点都用三个0~255的值来表示red, green, blue,每个占一个字节,所以称为24位图,这里默认图片格式为bmp。

    文件头

    ​ 图片是以二进制存储数据的,通常在不同的图片格式中,文件头的格式以及包含的信息(图片的大小尺寸)都不同,这些信息,可以通过读取图片二进制内容获取。

    ​ bmp图片的文件头一般为54字节。

    需要注意的是,要更改图片格式,并不是修改后缀名就可以,不同类型的图片自身编码格式不同,所以需要另一种方法改变图片格式

    1. 可以在网上搜索在线修改图片格式为bmp的网站。

    2. 可以直接在画图工具中打开。

      有一个软件《文件格式分析器》可以检测文件类型,直接拖拽进去就行。百度网盘地址为:链接:https://pan.baidu.com/s/17RQ-31dMTqagPrvxoXaDbA
      提取码:ah42

      关于MATLAB的下载及安装,大家可以搜索微信公众号:软件安装管家

    重点

    ​ 今天我们讨论的水印加密最好需要转化成bmp图像进行操作,其次,为了简单起见,我们是使用灰度图,每个像素点用0~255的值来表示黑白颜色深度,图像本质并未有变化。

    ​ 准备:MATLAB, 载体图片(彩色), 要隐藏的图片(黑白)

    ​ 需要注意的点:

    1. 图像灰度处理的知识:图像灰度化
    2. 为什么要扩大被隐藏图片的大小
      1. 因为这里假设进行LSB加密和提取水印的不是同一个人,所以提取水印的人并不知道到底应该在载体图像中提取多少信息。
      2. 如果不考虑提取,只是添加水印,则这里不需要扩大图片的大小,而且同一个载体图片可以隐藏更多的信息。
      3. 使用MATLAB函数,只是在视觉上改变了图片的胖瘦,其信息仍然具有有效性。
    3. 二值化的相关知识
      1. 为了压缩水印。被隐藏的图片的每个像素是有不同的灰度阶,二值化之后,每个像素就只有0和1中的一种可能,就可以认为将图片的八个比特面压缩成了一个,这样更方便于嵌入到载体图像中.

    附上MATLAB代码及注释

    //加水印
    
    %ary 表示那个比特面,1是最低比特位
    ary = 1;
    
    file_name1 = 'demo.bmp';
    cover_object = imread(file_name1);      %读取本人照片信息
    cover_object = rgb2gray(cover_object);      %得到灰度图信息
    cover_object_ll = bitget(cover_object, ary);        %得到最后1位比特
     
    figure;     %唤醒一个窗口
    imshow(cover_object);
    title('origin host picture');   %展示原图像形成的灰度图
     
    figure;
    imshow(255*cover_object_ll);            %最低位左移到最高位
    title('origin hot pic`lowest bit');     %展示原图像的最低位
     
    file_name2 = 'Finger.bmp';
    message = imread(file_name2);
    
    figure;
    imshow(message);
    
    message = im2bw(message, graythresh(message));      %将指纹图像变为二值图
    
    figure;
    imshow(message);
    title('hidden picture');
     
    Mc = size(cover_object, 1); %Height   读取图片的大小
    Nc = size(cover_object, 2); %Width
    
    message = imresize(message, [Mc Nc]);       %使被隐藏图片和载体图片等长宽
    
    watermarked_image = cover_object;
    
    %使得载体图片的最后一个比特位,与被隐藏图片的数据相等
    for ii = 1 : Mc
    	for jj = 1 : Nc
    		if ii*jj < Mc * Nc              %小于指纹信息的图片大小
    			if cover_object_ll(ii, jj) ~= message(ii, jj)     %左右两端不相等,结果为一
    				if cover_object_ll(ii, jj) == 1
    				watermarked_image(ii, jj) = bitset(watermarked_image(ii,jj), ary, 0);   %不相等改为0
    				else
    				watermarked_image(ii, jj) = bitset(watermarked_image(ii,jj), ary, 1);
    				end
    			end
    		end
    	end
    end
    
    figure;
    imshow(watermarked_image);
    title('watermarked picture');
    saveas(gcf, 'ok.bmp');
    figure;
    watermarked_image_ll = bitget(watermarked_image, ary);
    imshow(255 * watermarked_image_ll);
    title('watermarked picture`s lowest bit');
    
    

    提取水印的过程就更简单:

    file = 'ok.bmp'
    water_pic = imread(file); %待提取图像
    water_pic_1 = bitget(water_pic, 1);        %得到最后1位比特
    
    figure;
    imshow(water_pic);
    
    figure;
    imshow(255*water_pic_1);
    saveas(gcf, 'abstarct.bmp');
    

    但是这种做法,安全性很差,如果遇到中间人攻击,提取最后一个比特面的信息,就可以随意的获取,替换被隐藏的信息,所以最好在提取时,已知被隐藏图片的大小,这样可以提高安全性。

    如果程序出现问题,可以私信我。

    写文章之前也参考了其它博文,仅作学习。

    展开全文
  • 信息隐藏领域STC校验网格码源代码(STC工具箱),实现SPIE2010论文Tomas Filler, Jan Judas, Jessica Fridrich."Minimizing Embedding Impact in Steganography using Trellis-Coded Quantization",包含Windows/...
  • IDCT算法MATLAB代码

    2015-01-18 22:24:42
    DCT嵌入算法的逆向运算,实现数字水印信息隐藏的提取
  • 【最全的】直方图平移信息隐藏原理及代码matlab实现)可逆信息隐藏直方图平移功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个...

    可逆信息隐藏

    将秘密信息,隐藏在图像、音频和视频等载体中,以实现对其保护或秘密信息的传输。接收者可以恢复原始图像,并提取出秘密信息。

    直方图

    随机一张png图像的直方图

    每一幅图像都有它的直方图,横坐标是灰度值,纵坐标是该灰度值对应的像素点的数量。直方图中的每一个竖条就称为一个bin。一幅直方图中最高的那个点,就称为峰点P。最低的那个点(通常为0),叫做零点Z。

    直方图平移

    将峰点与零点之间的所有bin向左或者向右平移一位,那么就多出来一个空白的bin。我们可以利用这个bin来嵌入秘密信息。

    具体做法为:
    若P>Z,则将Z+1到P-1的所有bin向左平移一位;这样P-1的bin就空出来了
    若P<Z,则将P+1到Z-1的所有bin向右平移一位;这样P+1的bin就空出来了

    对应在代码中的操作,就是判断某个点的灰度值是否在p~z之间,然后对应灰度值加1或者减1即可。

    信息嵌入

    在这里插入图片描述

    计算机中存储的信息都是二进制的,要么是0,要么是1。以P>Z为例,由于P-1的bin空出来了。于是我们把为0的秘密信息存放在灰度值为P的像素中,把为1的秘密信息存在灰度值为P-1的像素中。
    具体的代码操作,就是依次找到图像中灰度值为P的像素点,若要嵌入的秘密信息为0,则该点的灰度值不变。若要嵌入的秘密信息为1,则该点的灰度值减1。在图像中的显示,就相当于把峰值点的bin切分成了两部分,一部分嵌入秘密信息0的还在P位置,另一部分嵌入秘密信息1的在P-1的位置。由于P-1的灰度值已经被空出来了(直方图平移), 所以我们这样操作是可以恢复原始信息与原始图像的。

    (当P<Z时,P+1的bin空出来了,在P像素中嵌入0,在P+1中嵌入1,其他操作相同。)

    信息提取

    提取信息时,我们找到图中所有灰度值为P,和P-1的像素。对于灰度值为P的像素提取信息0,对于灰度值为P-1的像素提取秘密信息1。如此一来就能恢复秘密信息了。
    (当P<Z时,在P像素中提取0,在P+1中提取1,其他操作相同。)

    图像恢复

    把位于P和Z之间的所有bin相应地往回平移一位即可。

    最后附上matlab代码一份,如有错误还请指正。(本实验采用的是灰度图像,灰度值在0—255之间)

    % 直方图平移
    
    clear;clc;
    % img_org为原始图像,img也是原始图像,用于接下来的一系列操作,把字符串换成你要处理的图片
    img_org = imread('1.png');
    img = img_org;
    [M,N] = size(img);
    
    % 将图像的直方图存储为数组,graylevel代表灰度值,counts代表每一灰度对应的像素数量 
    [counts, graylevel] = imhist(img);
    [maxcount,maxgraylevel] = max(counts);
    
    % 找到count为0的点,若没有,就把灰度值为254的点的灰度值改为255,由此空出254的位置
    mingraylevel = 0;
    flag = true;
    for i=1:length(graylevel)
        if(counts(i)==0 && flag)
            mingraylevel = i;
            flag=false;
        end
    end
    % if(flag==false)
    %     for  i=1:M
    %         for j=1:N
    %             if(img(i,j) == 254)
    %                 img(i,j) = 255;
    %             end
    %         end
    %     end
    % end
    
    % 这里是判断峰值点与零点哪个灰度值比较大的一个flag
    maxbigger = true;
    
    % 直方图平移,也就是灰度值位于两峰值之间的像素点的灰度加一或者减一,空出峰值左边或者右边的一个bin
    % 分为两种情况,峰值最高点的像素大于(或者小于)峰值为0的像素
    
    if(mingraylevel > maxgraylevel)
        maxbigger = false;
        for i=1:M
            for j=1:N
                if( img(i,j) > maxgraylevel && img(i,j) <mingraylevel)
                    img(i,j) = img(i,j) + uint8(1);
                end
            end
        end
    else
        for i=1:M
            for j=1:N
                if( img(i,j) < maxgraylevel && img(i,j) > mingraylevel)
                    img(i,j) = img(i,j) - uint8(1);
                end
            end
        end
    end
    
    
    % 产生随机秘密信息
    % Max Embedding Capcity,最大嵌入量为峰值点P对应的像素的数量
    mec = counts(maxgraylevel);
    rng(180)
    msg = round(rand(1,mec));
    count = 1;
    
    
    % 嵌入秘密信息
    if(maxbigger)
        for i = 1:M
            for j = 1:N
                if(img(i, j) == maxgraylevel)
                    % 若带嵌入的信息为1,则将该点灰度值加1
                    if( msg(count) == 1 )
                        img(i, j) = img(i, j) - uint8(1);
                        count = count + 1;
                    else % 否则将改点的灰度值加0,也就是不进行任何操作,只需要把count+1 
                        count = count + 1;
                    end
                end
            end
        end
    else
        for i = 1:M
            for j = 1:N
                if(img(i, j) == maxgraylevel)
                    % 若带嵌入的信息为1,则将该点灰度值加1
                    if( msg(count) == 1 )
                        img(i, j) = img(i, j) + uint8(1);
                        count = count + 1;
                    else % 否则将改点的灰度值加0,也就是不进行任何操作,只需要把count+1 
                        count = count + 1;
                    end
                end
            end
        end
    end
    
    
    % 提取秘密信息
    times = 1;
    extract_msg = zeros(1,mec);
    if(maxbigger)
        for i = 1:M
           for j = 1:N
               if( img(i, j) == maxgraylevel )
                   extract_msg(times) = 0;
                   times = times + 1; 
               elseif( img(i, j) == (maxgraylevel - 1))
                  
                   extract_msg(times) = 1;
                   times = times + 1;
               end
           end
        end
    else
        for i = 1:M
           for j = 1:N
               if( img(i, j) == maxgraylevel )
                   extract_msg(times) = 0;
                   times = times + 1; 
               elseif( img(i, j) == (maxgraylevel + 1))
                   extract_msg(times) = 1;
                   times = times + 1;
               end
           end
        end
    end
    
    
    
    
    %% 验证机密信息是否相等
    
    if(msg ~= extract_msg)
        disp("秘密信息不同")
    else
        disp("秘密信息相同")
    end
    
    
    
    % 将嵌入的秘密消息去除
    if(maxbigger)  
        for i=1:M
            for j=1:N             
               if(img(i,j)==maxgraylevel-uint8(1))
                   img(i,j) = maxgraylevel;
               end
            end
        end 
    else
        for i=1:M
            for j=1:N             
               if(img(i,j)==maxgraylevel+uint8(1))
                   img(i,j) = maxgraylevel;
               end
            end
        end   
    end
    
    
    
    % 直方图平移回去,恢复原始图像
    if(maxbigger)   
        for i=1:M
            for j=1:N           
                if( img(i,j) < maxgraylevel && img(i,j) > mingraylevel)
                    img(i,j) = img(i,j) + uint8(1);
                end
            end
        end
    else
        for i=1:M
            for j=1:N            
                if( img(i,j) > maxgraylevel && img(i,j) <mingraylevel)
                    img(i,j) = img(i,j) - uint8(1);
                end
            end
        end
    end
    
    
    if(img == img_org)
        disp("恢复图像相同")
    else
        disp("恢复图像不同")
    end
    
    for i=1:M
        for j=1:N
            if(img(i,j)~=img_org(i,j))
                disp(i+"不同"+j)
            end
        end
    end
    
    
    
    
    
    
    
    
    
    
    
    
    

    参考资料:
    代码参考: https://blog.csdn.net/V1AN_zzz/article/details/100829215
    论文参考:基于直方图平移的安全可逆信息隐藏算法 (崔炳德)

    展开全文
  • matlab实现信息隐藏---整理

    千次阅读 2020-02-05 10:49:55
  • 多层ELM进行MNIST手写字符分类MATLAB代码,直接运行.m程序,如果现实内存溢出,请改小隐藏节点个数。
  • 信息隐藏技术实验教程中diamondreplace.m的子涵数replace32fun.m
  • matlab 绘图函数汇总 基本绘图和图形 box errorbar hold line LineSpec (Line Specification) loglog plot plot3 plotyy polar semilogx, semilogy subplot 坐标轴边界 沿曲线绘制误差条 在图形窗口中保留当前图形 ...
  • DCT变换 DCT又称离散余弦变换,是一种块变换方式,只使用余弦函数来表达信号,与傅里叶变换紧密相关。常用于图像数据的压缩,通过将图像分成大小相等(一般为8*8)的块,利用DCT对其进行...DCT变换的代码实现分为...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼%% 生成路径数据data=[[0,10,9,7,8,8,8,3,4,10,7],[0,0,4,9,14,18,18,13,14,11,4],[0,0,0,5,10,14,17,12,13,15,8],[0,0,0,0,5,9,15,10,11,17,13],[0,0,0,0,0,6,13,11,12,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 173
精华内容 69
关键字:

matlab隐藏代码

matlab 订阅