位平面分解技术-程序员宅基地

技术标签: 图像处理  混沌系统图像加密技术  

将灰度图中处于同一个比特位上的二进制像素值进行组合,得到一副二进制值图像,该图像称为灰度图的一个位平面。这个过程为平面分解。目前常见的平面分解技术有三种,分别是二进制位平面分解(BBD)、格雷码位平面分解技术(GCBD)以及截断斐波那契P码位平面分解技术(TFPBD)。BBD以及GCBD是两种传统的分解方法,他们可以将灰度图像分解成八个二进制平面。而TFPBD是一种参数位平面分解方法(可以将一张图像分解成N张子图,这里的N可以由参数调解)。

二进制位平面分解技术(BBD)

对于任何一个非负的整数都可以被一个二进制序列所表示,数学公式如下所示:
在这里插入图片描述
对于一般灰度图像而言,其灰度值通常是一个0到255之间的十进制数,那么每一个像素都可以由8位二进制序列唯一表示。因此,BBD可以将灰度图像拆分成8个二进制平面。第一个位平面是由灰度图像中每一个像素的二进制表示的所有第一位所组成的,如下图我们展示了将一个lena图分解成八张位平面子图的效果。
在这里插入图片描述

在这里插入图片描述
下图展示了将lena图分解后,各个平面图的样子,其中(a)为lena的原图,从(b)到(i)展示了从最低位平面到最高位平面,其中我们可以很明显发现第八张子图(i)最接近lena的原图,这也就说明了在组成一张图的过程中,高位的图往往起到了更加关键的作用。在这里插入图片描述

python代码如下

import cv2
import numpy as np

image = cv2.imread("lena.bmp", 0)
h, w = image.shape

x = np.zeros((h, w, 8), dtype=np.uint8)
for i in range(8):
    x[:, :, i] = 2 ** i

r = np.zeros((h, w, 8), dtype=np.uint8)
for i in range(8):
    r[:, :, i] = cv2.bitwise_and(image, x[:, :, i])
    mask = r[:, :, i] > 0
    r[mask] = 255

    cv2.imshow(str(i), r[:, :, i])

cv2.waitKey()
cv2.destroyAllWindows()

matlab代码如下

clc;
clear all;
img = imread('lena.bmp');

% 获得比特平面分层后的图像
imageBit = myImageBitPlaneSlicing(img);
[r c k] = size(imageBit);
% 画出原图像
subplot(3,3,1);
imshow(img);
title('原始图像:EXP3C.tif','FontSize',20,'FontName','微软雅黑');
start = 2;
% 分别画出比特平面分层后的图像
for k = 1 : 8
    img_temp = imageBit(1:r,1:c,k);
    subplot(3,3,start);
    imshow(mat2gray(img_temp));
    pic_title = sprintf('第 %d 阶比特平面图像',k);
    title(pic_title,'FontSize',20,'FontName','微软雅黑');
    start = start + 1;
end

myImageBitPlaneSlicing(img)函数

function imageBit = myImageBitPlaneSlicing(img)
% 用于比特平面分层
% img:一幅m×n×1的8比特图像;
% imageBit:一个m×n×i (i = 1, 2, …, 8)的矩阵,第i个通道上存储第i阶比特平面图像

img_double = double(img);
[r c] = size(img_double);
imageBit = zeros(r,c,8);
% 遍历每一个像素点,将其值转换为8位2进制字符串,然后提取转型并赋值到对应比特平面
for row = 1 : r
    for col = 1 : c
        % 将灰度级转为8位2进制字符串
        bin_str = dec2bin(img_double(row, col),8);
        for i = 1 : 8
            % 提取对应位置的字符,转型后赋值到对应平面的对应位置
            digit = str2double(bin_str(i));
            imageBit(row,col,9-i) = digit;
        end
    end
end
imageBit = uint8(imageBit);

格雷码位平面分解技术(GCBD)

格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,其数学表达式如下,其中b(i)和g(i)分别是非负十进制数N的二进制表示和格雷码表示。
在这里插入图片描述

二进制码转换成二进制格雷码示例

在这里插入图片描述

格雷码位平面分解流程图

在这里插入图片描述
与BBD类似,灰度图像也可以分解成8个格雷码位平面。但是,对于一般的图像,GCBD的每一个位平面的内容与BBD种相对于的位平面的内容几乎是完全不同的。这种分解方法通常可以大大减小灰度变化所带来的影响。

P-Fibonacci位平面分解(TFPBs)

对于一个P-Fibonacci序列其标准数学定义如下:在这里插入图片描述

上述公式中 i 为序列的位置索引,非负整数是距离参数。P-Fibonacci数列数列会根据不同的P值而变化。如下表,我们给出了一些例子。同时我们注意到P-Fibonacci数列可以导出两个数列的幂(p=0)以及最传统的斐波那契数列(p=1)。
不同P值所的Fibonacci序列
当P=1时,我们看到P-Fibonacci变成了我们最传统的Fibonacci数列。
在这里插入图片描述
类似于BBD,图像也可以分解成截断的斐波那契p码位平面(TFPBs)。与BBD和GCBD不同,截断斐波那契p码位平面分解是一种参数相关的分解方法。对于特定的图像,TFPBD可以生成八个以上的位平面。例如,一个灰度图像可以分解成p=1的12个位平面。此外,随着p值的变化,位平面的数量和每个位平面中的内容是不同的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41296039/article/details/117415963

智能推荐

NFC技术演进_nfc的演进-程序员宅基地

文章浏览阅读289次。RF演进protocol 演进_nfc的演进

1.3 wait 和notify 原理_wait 和 notify原理-程序员宅基地

文章浏览阅读384次。wait 和notify 是实现线程之间的协同工作,必须结合synchronized使用,wait 释放锁,notify 不释放锁(但是此时会通知在等待的wait,该notify完全执行完毕,才真正释放锁)public class DemoThread18{ //原子类 private volatile List<String> list = new ArrayList..._wait 和 notify原理

谷歌又出浏览器了Google Chrome_谷歌浏览器 我是人类-程序员宅基地

文章浏览阅读601次。相信大部分 做ui的朋友 都非常痛恨一件事情 就是程序以及css和不同浏览器的兼容问题,我就奇怪了google你不好好的做你的搜索引擎,弄什么浏览器呀,本让现在 作东西考虑各个浏览器兼容 已经够累的,你还真会添乱。本来做你就做也无所谓,还花那么大力气推广,要不说你有钱,有了用户群,写东西就不得不考虑你了,大哥我们这些 闷头写程序的不容易,我们还要养家户口呢,你就别添乱了行不行。 _谷歌浏览器 我是人类

微信公众号在线选房电子选车位房地产云开盘线上大屏幕抢房系统-程序员宅基地

文章浏览阅读551次,点赞18次,收藏9次。前端演示咨询客服:

MAKO Vimba2.0安装教程和qt中调用Vimba相机_vimba viewer-程序员宅基地

文章浏览阅读6.4k次,点赞7次,收藏29次。一、MAKO Vimba2.0安装教程1. 打开Vimba2.0安装软件,用户可到大恒官网下载最新驱动。2.选择选项Application Development和安装路径,注意:安装路径中不要存在空格。然后,点击Star,开始安装。 3.勾选Install Vimba Drivers,然后,点击Exit退出。4.接下来继续安装,勾选-选择“安装”,重复操作..._vimba viewer

【Linux4.1.12源码分析】协议栈报文接收之传输层处理分析(UDP)___udp4_lib_rcv-程序员宅基地

文章浏览阅读3k次。UDP报文的处理入口是udp_rcv函数,该函数是在ip_local_deliver_finish函数中被调用的。1、udp_rcv函数int udp_rcv(struct sk_buff *skb){ return __udp4_lib_rcv(skb, &udp_table, IPPROTO_UDP);}2、__udp4_lib_rcv函数int __udp4_lib_rcv___udp4_lib_rcv

随便推点

HOG特征——行人识别_hog特征识别行人 peopledetector=vision.peopledetector; i=-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏24次。HOG特征简介HOG 全称为 Histogram of Oriented Gradients ,即方向梯度的直方图。HOG 是由 Navneet Dalal & Bill Triggs 在 CVPR 2005发表的论文中提出来的,目的是为了更好的解决行人检测的问题。先来把这几个字拆开介绍,首先,梯度的概念和计算梯度的方法已经在前一篇文章中介绍了,方向梯度就是说梯度的方向我们也要利用上,..._hog特征识别行人 peopledetector=vision.peopledetector; i=imread(

Spring Cloud 微服务的安全保护_springboot微服务安全-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏9次。上一篇文章中介绍了如何使用Spring Cloud搭建微服务,在本文中讲讲如何对微服务进行安全保护。在Spring Cloud中对应用进行安全保护通常使用Spring Security,这种方式集成起来非常简单而且很容易扩展现有的应用场景。在分布式环境中Spring Security使用Spring Session和Redis来共享会话。共享会话可以将在微服务网关中登录的用户验证信息传递到系统..._springboot微服务安全

生物信息学中两种常用的文本文件_.fa.gz-程序员宅基地

文章浏览阅读961次。通过自学《碱基矿工》[http://mp.weixin.qq.com/mp/homepage?__biz=MzAxOTUxOTM0Nw==&hid=1&sn=d945cf61bd86e85724e146df42af5bcc&scene=18#wechat_redirect]下面分别介绍这两种格式FASTAFASTA常作为存储有顺序的序列数据的文件后缀,包括我们常用的..._.fa.gz

【centos安装mysql服务器并开启远程访问】_centos 查看 mysql 远程连接-程序员宅基地

文章浏览阅读1k次。centos安装mysql如果设置的密码太简单了会报错( ERROR 1819 (HY000): Your password does not satisfy the current policy requirements)解决方案如下:登录mysql执行:第一个密码强度等级,第二个是密码长度设置为6位(如果你设置的是8位就不做修改)另外可以通过语句查看密码设置规则2 赋权所有远程ip都可以进行登录(如果未开放端口得需要去腾讯云或者阿里云官网实例防火墙与策略开启端口,mysql默认的_centos 查看 mysql 远程连接

Linux(centos)下Nginx+Keepalived集群环境搭建_linux搭建nginx+keepalived-程序员宅基地

文章浏览阅读299次。本人使用的环境是CentOS-6.4-x86_64-bin-DVD1.rar,nginx-1.6.2.tar.gz,keepalived-1.2.18.tar.gz。三台机器ip:192.168.1.123,192.168.1.124。同时关闭两台虚拟机的防火墙:chkconfig iptables off(永久关闭防火墙)..._linux搭建nginx+keepalived

WebMagic Java 爬虫的简单应用_webmagic没反应-程序员宅基地

文章浏览阅读2k次。前段时间做旅游本体的知识库,我和老师反应说景点之间关系太少了,导致整个图很稀疏。。“你去wiki上抓一批数据吧”,就这样被自己坑了。由于一直在用java做项目,ZWQ师兄推荐的是selenium,这个我想说真的很强大,还支持JS渲染,不过当我看到这篇的时候,我决定学一下WebMagic。项目中文文档地址:http://webmagic.io/docs/zh/这个项目很容易上手,只要_webmagic没反应