matlab 实现图像的分块和恢复

本文介绍了一种图像处理方法,通过将大图片分成500x500大小的无重叠块,分别处理后再合并回原尺寸。作者提供了分块和合并代码示例,展示了如何使用MATLAB实现图片的分块与恢复过程,适用于处理大型图像任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些图像可能太大,处理不方便,所以我写了一个程序用来图像分块。

分块后图像处理后,再将处理后的图像进行拼接,实现最后的结果。

源图像----->分块----->处理------>处理后的小片结果图像-------->合并。

以上处理各个图像之间没有重叠。

原始图像:

分割后:

分割的代码:

clear;
clc;
 
%%图片进行无重叠分块
img = imread('C:\Users\A39.JPG');
 
%% resize the image into the new size with 500x*500y
r_img = img(:, :, 1);
g_img = img(:, :, 2);
b_img = img(:, :, 3);
[row, col] = size(r_img);

%ceil 进行四舍五入计算
new_row = ceil(row/500) * 500;
new_col = ceil(col/500) * 500;


new_r_img = imresize(r_img, [new_row new_col], 'bilinear');
new_g_img = imresize(g_img, [new_row new_col], 'bilinear');
new_b_img = imresize(b_img, [new_row new_col], 'bilinear');


new_img(:, :, 1) = new_r_img;
new_img(:, :, 2) = new_g_img;
new_img(:, :, 3) = new_b_img;
 
[y_row,y_col,dim] = size(new_img);
row_blk_num = y_row/500;  % 3
col_blk_num = y_col/500;  % 6
 
blocks = 1;
for i = 1:row_blk_num
    for j = 1:col_blk_num
        disp(blocks);
        block = new_img((i - 1) * 500 + 1 : i * 500, (j - 1) * 500 + 1 : j * 500, :);
        imwrite(block, ['C:\Users\MenahemLi\Desktop\结果\A\' num2str(blocks) '.jpg']);
        blocks = blocks + 1;
    end
end

图像恢复:

恢复是从文件名入手,所以文件名对于恢复很重要。不可乱改

合并的代码:

clear;
clc;

%%进行无重叠分块后的图片复原
img = imread('C:\Users\A\A39.JPG');

%% resize the image into the new size with 500x*500y
r_img = img(:, :, 1);
g_img = img(:, :, 2);
b_img = img(:, :, 3);
[row, col] = size(r_img);

%ceil 进行四舍五入计算
new_row = ceil(row/500) * 500;
new_col = ceil(col/500) * 500;


new_r_img = imresize(r_img, [new_row new_col], 'bilinear');
new_g_img = imresize(g_img, [new_row new_col], 'bilinear');
new_b_img = imresize(b_img, [new_row new_col], 'bilinear');


new_img(:, :, 1) = new_r_img;
new_img(:, :, 2) = new_g_img;
new_img(:, :, 3) = new_b_img;
 
[y_row,y_col,dim] = size(new_img);
row_blk_num = y_row/500;  % 行数
col_blk_num = y_col/500;  % 列数

blocks = 1;
temp = zeros(500,col_blk_num*500);
for i = 1:row_blk_num
    img = imread(['C:\Users\A\' num2str((i-1)*col_blk_num+1) '.jpg']);
    for j = 1:col_blk_num
        img2 = imread(['C:\Users\A\' num2str(blocks) '.jpg']);
        img = [img,img2];
        blocks = blocks + 1;
    end
    if(i==1)
        temp = img;
    end
    if(i~=1)
        temp=[temp;img];  
    end
end
imshow(temp);

 关注公众号获取更多有趣分享

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_文和_

感觉对您有用,可以来点鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值