现在的位置: 首页 > 综合 > 正文

matlab 最基础的数字图像处理

2012年11月24日 ⁄ 综合 ⁄ 共 1362字 ⁄ 字号 评论关闭

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

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

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

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

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

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);

这样处理后就把图片合并出来了,在这两个函数中间就可以做些变换压缩之类的,恢复后和原图比较就可以知道压缩效果的好坏了。

抱歉!评论已关闭.