matlab实现图像分块

在图像分块之前需要找到你想要分块的图像的路径,若用matlab自带的图片可在此路径查看:C:\Program Files\MATLAB\R2014a\toolbox\images\imdata   若没找到该路径,就回忆一下自己把matlab安装在哪个目录下,然后去找到:MATLAB\R2014a\toolbox\images\imdata 这个路径就可查看matlab自带的图片

一般对图像处理的研究中会因为图片尺寸太大不好处理的情况,这种时候就需要将图像进行分块,正好我用到了两种形式的分块方式,在此记录下来以供参考。

程序语言中对图像的分块是严谨的,虽然我们看到的最终分块的结果和我们预想的差不多,但在计算机处理中处理的过程却麻烦许多。

1. z字形图像分块:

       大概的分块思路用一张图就可以明确:按照从左到右,从上到下分块的方式将图片分块,这也是比较常见的一种分块方式,计算机要一个块一个块的分出来,分完才能达到这样的效果,如下所示。

z字形分块的matlab代码如下:

% 读取图片 %imread('图片的路径\图片名称.图片格式')
image = imread('D:\Matlab\matlab\Polyspace\R2020b\toolbox\images\imdata\cameraman.tif');

% 获取图片的尺寸
[height, width] = size(image);

% 分块的大小
blockSizeR = 16;  % 分块大小要能整除图片大小
blockSizeC = 16;
number_height = height/blockSizeR;  % 高度可以分成几块
number_width = width/blockSizeC;
number_block = number_height * number_width;  % 分块的个数 

% 对图像z字形分块
blocks = zeros(blockSizeR,blockSizeC,number_block);
count = 0;  % 存索引
for i = 1 : blockSizeR : height
    for j = 1 : blockSizeC : width 
        count = count + 1;
        blocks(:, :, count) = image(i:i+blockSizeR-1, j:j+blockSizeC-1);  
    end
end

显示图像代码如下:

% 显示图片
imshow(image)

% 显示分块的结果
figure
count = 0;
for i = 1:number_height
    for j = 1:number_width
        count = count+1;
        block = blocks(:, :, count);
        subplot(number_height,number_width,count);
        imshow(block,[]);
    end
end

分块的结果如下:

2. 使用matlab自带的分块函数 : mat2cell()   代码如下:

% matlab自带的分块函数
% 初始化
clear; clc; close all;

% 读取图片 %imread('图片的路径\图片名称.图片格式')
image = imread('D:\Matlab\matlab\Polyspace\R2020b\toolbox\images\imdata\cameraman.tif');

% 获取图片的尺寸
[height, width] = size(image);

% 分块的大小
blockSizeR = 16;  % 分块大小要能整除图片大小
blockSizeC = 16;
number_height = height/blockSizeR;  % 高度可以分成几块
number_width = width/blockSizeC;

% 分块
blocks = mat2cell(image, blockSizeR * ones(1, number_height), blockSizeC * ones(1, number_width));

需要注意的是mat2cell将图片image制作成了元胞数组,此时若想用子块的数据需要用大括号blocks{第几行,第几列}才能给子块的数据调出来,具体代码如下:

% 调用第2行第3列的子块的具体数据
block = blocks{2,3};

显示图像的代码:

% 显示图片
imshow(image)

% 显示分块的结果
figure
count = 0;
for i = 1:number_height
    for j = 1:number_width
        count = count+1;
        block = blocks{i,j};
        subplot(number_height,number_width,count);
        imshow(block,[]);
    end
end

显示的结果:结果和第一种方法是一样的。

总结:记录了两种matlab对图像分块的方式和代码,一般我会用第二个,简单方便。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值