matlab实现 图像的比特平面分层 代码
2018-10-25 21:29
2096 查看
题目:自定义一个用于比特平面分层的函数,给定一副8比特灰度图像(EXP3B.tif和EXP3C.tif),输出该图像第1阶至第8阶比特平面图像。
说明:函数模板为imageBit = myImageBitPlaneSlicing(img);其中,输入参数img为一幅m×n×1的8比特图像;输出参数imageBit为一个3维数组,即imageBit为一个m×n×i (i = 1, 2, …, 8)的矩阵,要求该矩阵的第i个通道上存储第i阶比特平面图像,其中最低阶比特平面为i = 1的比特平面。
实现思路:
像素是由比特组成的数字,一幅8比特图像可看为8个1比特图像组成,所以我们可以尝试将图像数据转化为二进制字符串,再来判断每个像素的二进制中的某位是否为1,对此做出相应的处理。
流程:
1. 将图像数据转为double类型的,这样比较节省储存空间
2. 获取图像的高r和宽c
3. 定义一个8层的 r X c的零矩阵,用于存放最后的结果
4. 将图像数据转换为8位的二进制字符串,便于判断位于第几比特平面
5. 将图像的二进制字符串矩阵转化为[r,c,8]的矩阵
6. 遍历每个像素点,取出矩阵中每个像素点的二进制数,并遍历二进制数的每一位的值,判断是否为1,若为1则赋值为1,否则赋值为0
7.依次输出每一层的图像
实现效果:
实现源代码:
[code]function imageBit = myImageBitPlaneSlicing(img) img = double(img);%将图像数据转为double类型的,这样比较节省储存空间 [r,c] = size(img) imageBit = zeros(r,c,8);%定义一个8层的 r X c的零矩阵 img_bin = dec2bin(img,8);%将图像数据转换为二进制字符串,便于判断位于第几比特平面 [r1,c1] = size(img_bin)%此时矩阵的大小为[r * c,8] img_bin = reshape(img_bin(:),r,c,c1);%将图像的二进制矩阵转化为[r,c,8]的矩阵 %[r,c,l] = size(img_bin)%此时大小为[r,c,8] for i = 1 :r for j = 1:c temp = img_bin(i,j,:);%取出矩阵中每个像素点的二进制数 for k = 1:8 if isequal(temp(9-k),48)%int('1')=48,判断第k位二进制数是否为'1' imageBit(i,j,k) = 0; else imageBit(i,j,k) = 1; end end end end end
[code]clc; clear; close all; img1 = imread('EXP3B.tif'); imageBit1 = myImageBitPlaneSlicing(img1); figure('name','比特平面分层 EXP3B.tif'); subplot(3,3,1); imshow(img1); title('原始图像:EXP3B.tif'); for i = 1:8 subplot(3,3,i + 1); imshow(imageBit1(:,:,i)) title(['第',num2str(i),'比特平面']); end
阅读更多
相关文章推荐
- matlab实现 基于若干个高阶比特平面的图像重构 代码
- 比特平面分层原理及matlab实现
- [图像]Canny检测的Matlab实现(含代码)
- 【图像处理笔记】比特平面分层
- 图像质量评价之PSNR 和SSIM(附Matlab实现代码)
- 图像分割指标及Matlab代码实现
- MATLAB实现基于邻近插值的图像旋转代码
- 图像细化matlab代码实现
- 医学图像配准实现代码(matlab篇)
- hog matlab代码1——实现hog+svm图像二分类
- 多种图像的颜色/纹理描述子及其matlab代码实现 相似性量测方法
- 用一行matlab代码实现图像翻转
- 图像Ostu二值化原理及matlab实现代码
- Matlab 摄像头,获取外界图像,底层代码实现按钮
- BOF算法+K-Means算法实现图像检索(Matlab实现代码)
- 图像]Canny检测的Matlab实现(含代码)
- [图像]Canny检测的Matlab实现(含代码)
- 图像位平面分层及matlab实现
- 图像缩放插值算法以及matlab简单实现(最近邻法、双线性插值法、三次卷积法)
- matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性