matlab 进行图片压缩 (采用最大池化的方法)

先贴上效果图:
matlab 进行图片压缩 (采用最大池化的方法)_第1张图片

  1. 将读取图片,并将其赋给矩阵变量。并测算一下矩阵大小

    im=imread('1.jpg');
    imgsize = size(im);
    
  2. 将图片进行预处理。因为这里我们进行池化操作的过滤器的尺寸是 3 * 3。
    所以对与一些图片尺寸的大小(长宽)不能为3整除的,我们需要进行处理。

    while 1==1
        if mod(imgsize(1),3)== 0
            break;
        end
        im = im(1:end-1,:,:);
        imgsize = size(im)
    end
    
    while 1==1
        if mod(imgsize(2),3)== 0
            break;
        end
        im = im(:,1:end-1,:);
        imgsize = size(im);
    end
    
  3. 对图片进行预处理后,我们需要使用过滤器提取矩阵中所有区域。
    matlab 进行图片压缩 (采用最大池化的方法)_第2张图片

    im1=im(1:3:end,1:3:end,:);
    im2=im(2:3:end,1:3:end,:);
    im3=im(3:3:end,1:3:end,:);
    im4=im(1:3:end,2:3:end,:);
    im5=im(2:3:end,2:3:end,:);
    im6=im(3:3:end,2:3:end,:);
    im7=im(1:3:end,3:3:end,:);
    im8=im(2:3:end,3:3:end,:);
    im9=im(3:3:end,3:3:end,:);
    
  4. 接下来就是从每个区域(图中颜色块)9个值中,选取其中最大的作为最后图像在该点的值。

    im_max = max(cat(4,im1,im2,im3,im4,im5,im6,im7,im8,im9),[],4);
    
  5. 这样我们就得到最终图像。那接下来就是输出图像了。

    figure('color','w')
    ha=subplot(1,2,1);
    imshow(im,imref2d(size(im)))
    i = size(im);
    title(ha,['原图 大小为:',num2str(i(1)),'*',num2str(i(2))],'FontSize',10)
    ha=subplot(1,2,2);
    imshow(im_max,imref2d(size(im1)))
    i = size(im_max);
    title(ha,['3*3最大池化后,大小为:',num2str(i(1)),'*',num2str(i(2))],'FontSize',10)
    

如果你想要是复现实验效果,可以直接(依照循序)粘贴如上代码运行。这里我就不过多解释某行代码的具体作用及某个函数的用法。
如有疑问,请评论留言哦。

你可能感兴趣的:(matlab,matlab)