matlab 最基础的数字图像处理 .

这是上学期数字图像处理的作业,老师要我们比较dft,wht,dct种变换进行压缩后的效果比较,鄙人熬了两夜做了些小东西,为方便后人做的更好,也为了尽少周折,特上传程序至此,程序质量很低,欢迎各位提出宝贵意见。

首先是图片分割程序,有人用mat2cell之类的,因为cell概念还不是很清楚,我就用了很笨的方法做循环,将一个大的图片处理后变成4维的数组,4维数组中前2维是图片的横纵左边,后两维是子图片在大图片的位置,由此实现图片的分割。是不是很笨啊。

  1. function sub_image=div_image(scr_image,SUBSIZE)  
  2. % 功能:将scr_image按SUBSIZE*SUBSIZE大小分割  
  3. % 输入:scr_image:待处理的图片,SUBSIZE子图片大小  
  4. % 输出:sub_image:子图片集合,p,q为序号  
  5. % 注意:仅能处理二维图片,即灰度级图片  
  6. %   
  7. % Edit by lineter  
  8. % QQ:542375845  
  9. % Ningxia daxue  
  10. %   
  11. % 示例:  
  12. %  
  13. % a=imread('jinbo.bmp');  
  14. % a=rgb2gray(a);  
  15. % b=div_image(a,16);  
  16. % size(b)  
  17. %   
  18. % ans =  
  19. %   
  20. %     16    16    32    32  
  21. %   
  22.   
  23. if(ndims(scr_image)==3)  
  24.     scr_image=rgb2gray(scr_image);  
  25. end  
  26. [x,y]=size(scr_image);  
  27. for p=1:round(x/SUBSIZE)  
  28.     for q=1:round(y/SUBSIZE)  
  29.         sub_image(:,:,p,q)= ...  
  30.             scr_image(SUBSIZE*(p-1)+1:SUBSIZE*p,SUBSIZE*(q-1)+1:SUBSIZE*q);  
  31.     end  
  32. end  
  33. if(mod(x,SUBSIZE)~=0 || mod(y,SUBSIZE)~=0)  
  34.     disp('警告,图片边缘可能丢失!');  
  35. end  
function sub_image=div_image(scr_image,SUBSIZE)
% 功能:将scr_image按SUBSIZE*SUBSIZE大小分割
% 输入:scr_image:待处理的图片,SUBSIZE子图片大小
% 输出:sub_image:子图片集合,p,q为序号
% 注意:仅能处理二维图片,即灰度级图片
% 
% Edit by lineter
% QQ:542375845
% Ningxia daxue
% 
% 示例:
%
% a=imread('jinbo.bmp');
% a=rgb2gray(a);
% b=div_image(a,16);
% size(b)
% 
% ans =
% 
%     16    16    32    32
% 

if(ndims(scr_image)==3)
    scr_image=rgb2gray(scr_image);
end
[x,y]=size(scr_image);
for p=1:round(x/SUBSIZE)
    for q=1:round(y/SUBSIZE)
        sub_image(:,:,p,q)= ...
            scr_image(SUBSIZE*(p-1)+1:SUBSIZE*p,SUBSIZE*(q-1)+1:SUBSIZE*q);
    end
end
if(mod(x,SUBSIZE)~=0 || mod(y,SUBSIZE)~=0)
    disp('警告,图片边缘可能丢失!');
end

很笨很笨的方法,有用自带函数实现分割的请告诉我,非常感谢。


对应的合并图片方法如下:

  1. function image=sum_image(div_image)  
  2. % 功能:将scr_image合并成一张图片  
  3. % 输入:scr_image:待处理的图片集合  
  4. % 输出:sub_image:生成图片  
  5. % 注意:仅能处理二维图片,即灰度级图片  
  6. %   
  7. % Edit by lineter  
  8. % QQ:542375845  
  9. % Ningxia daxue  
  10. %   
  11. % 示例:  
  12. %  
  13. % a=imread('jinbo.bmp');  
  14. % a=rgb2gray(a);  
  15. % b=div_image(a,16);  
  16. % size(b)  
  17. %   
  18. % ans =  
  19. %   
  20. %     16    16    32    32  
  21. %   
  22.   
  23. if(ndims(div_image)~=4)  
  24.     disp('图像格式错误,不是图像集合');  
  25. end  
  26. [x,y,m,n]=size(div_image);  
  27. if(x~=y || m~=n)  
  28.     disp('图像大小不正确');  
  29. end  
  30.   
  31. image=[];  
  32. for p=1:m  
  33.     for q=1:m  
  34.         image((x.*(p-1)+1):(x.*p),(x.*(q-1)+1):(x.*q)) = uint8( div_image(:,:,p,q));  
  35.     end  
  36. end  
  37. image=uint8(image);  
function image=sum_image(div_image)
% 功能:将scr_image合并成一张图片
% 输入:scr_image:待处理的图片集合
% 输出:sub_image:生成图片
% 注意:仅能处理二维图片,即灰度级图片
% 
% Edit by lineter
% QQ:542375845
% Ningxia daxue
% 
% 示例:
%
% a=imread('jinbo.bmp');
% a=rgb2gray(a);
% b=div_image(a,16);
% size(b)
% 
% ans =
% 
%     16    16    32    32
% 

if(ndims(div_image)~=4)
    disp('图像格式错误,不是图像集合');
end
[x,y,m,n]=size(div_image);
if(x~=y || m~=n)
    disp('图像大小不正确');
end

image=[];
for p=1:m
    for q=1:m
        image((x.*(p-1)+1):(x.*p),(x.*(q-1)+1):(x.*q)) = uint8( div_image(:,:,p,q));
    end
end
image=uint8(image);

这样处理后就把图片合并出来了,在这两个函数中间就可以做些变换压缩之类的,恢复后和原图比较就可以知道压缩效果的好坏了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值