图像处理(Image Processing) ---------- 灰阶位图分割 (bit-plane slicing)(浮水印)(C#实现)

本文介绍了灰阶图像的位图分割原理,探讨了高位位图对图像信息的重要性,并提到低位位图常用于实现肉眼无法察觉的浮水印技术。同时,讲解了格雷码的转换规则及其在位图分割中的应用,提供了C#代码示例进行自然二进位和格雷码之间的转换。
摘要由CSDN通过智能技术生成
  • 灰阶图像,通常每个Pixel是由8个bit构成,即有256种变化。然而每个Pixel的8个bit,从最高位到最低位携带的信息量是逐渐递减的。可以看下面几幅图:
  •     右边是原图,下面就是将灰阶图每一个pixel的8bit分别取出,然后构成的8个平面,从右到左是0bit - 7bit 。可以看出越高位的位图携带原图的信息量越多、特征越多,甚至最后几张位图看上去就像杂讯。所以,其实最后几个位图完全不记录、去除,对原图的影响也是微乎其微,我们肉眼几乎无法察觉差异。所以很多浮水印技术就是通过替换最低几bit 的位图,做到为图像添加肉眼无法察觉的水印。
  •          

 

 

  • 格雷码形式:计算机中格雷码的出现是为了避免牵一发而动全身的情况,比如说:0111 \rightarrow 1000 , 一个自然进位会导致四个bit同时都被改变的情况,这样就会降低系统的稳定性,因为在0111变化到1000时通常还会有1100、1111...等情况出现。所以为了避免,格雷码就诞生了,一次只会有一个bit变化。同样,灰阶图像的位图也可以先化为格雷码的形式,再进行分割。
    • 自然二进位变换成格雷码的规则:最高位直接保留,构成格雷码的最高位。然后从左往右,最高位与次高位异或,结果为格雷码的次高位。以此类推......。
    • 当然还要来个格雷码变二进制:同样格雷码最高位变成二进制最高位,不同的是格雷码次高位与二进制最高位异或,结果为二进制次高位。以此类推......从左往右。

 

C#代码:

自然二进位分割:

 public void bitSlicing(Bitmap Image)
        {
            graycode = false;
            imop = new imageOperate();
            Bitmap GrayImg = imop.getGrayImage8(Image);
            PCXPicture.Image = GrayImg;
            int width = Image.Width;
            int height = Image.Height;
      
            Bitmap level1 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level2 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level3 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level4 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level5 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level6 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level7 = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Bitmap level8 = new Bitmap(width, height, PixelFormat.Format24bppRgb); 
          

            BitmapData level1Data = level1.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            BitmapData level2Data = level2.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            BitmapData level3Data = level3.LockBits(new Rectangle(0, 0, widt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值