图像放大算法总结及MATLAB源程序

合集下载

MATLAB图像增强总结程序

MATLAB图像增强总结程序

MATLAB图像增强程序举例1.灰度变换增强程序:% GRAY TRANSFORMclc;I=imread('pout.tif');imshow(I);J=imadjust(I,[0.3 0.7],[0 1],1); %transforms the walues in the %intensity image I to values in J by linealy mapping %values between 0.3 and 0.7 to values between 0 and 1. figure;imshow(J);J=imadjust(I,[0.3 0.7],[0 1],0.5); % if GAMMA is less than 1,the mapping si weighted to ward higher (brighter)%output values.figure;imshow(J);J=imadjust(I,[0.3 0.7],[0 1],1.5); % if GAMMA is greater than 1,the mapping si weighted toward lower (darker)%output values.figure;imshow(J)J=imadjust(I,[0.3 0.7],[0 1],1); % If TOP<BOTTOM,the output image is reversed,as in a p hotographic negative.figure;imshow(J);2.直方图灰度变换%直方图灰度变换[X,map]=imread('forest.tif');I=ind2gray(X,map);%把索引图像转换为灰度图像imshow(I);title('原图像');improfile%用鼠标选择一条对角线,显示线段的灰度值figure;subplot(121)plot(0:0.01:1,sqrt(0:0.01:1))axis squaretitle('平方根灰度变换函数')subplot(122)maxnum=double(max(max(I)));%取得二维数组最大值J=sqrt(double(I)/maxnum);%把数据类型转换成double,然后进行平方根变换%sqrt函数不支持uint8类型J=uint8(J*maxnum);%把数据类型转换成uint8类型imshow(J)title('平方根变换后的图像')3.直方图均衡化程序举例% HISTGRAM EAQUALIZATIONclc;% Clear command windowI=imread('tire.tif');% reads the image in tire.tif into Iimshow(I);% displays the intensity image I with 256 gray levels figure;%creates a new figure windowimhist(I);% displays a histogram for the intensity image IJ=histeq(I,64);% transforms the intensity image I,returning J an intensity figure;%image with 64 discrete levelsimshow(J);figure;imhist(J);J=histeq(I,32);%transforms the intensity image ,returning in % J an intensity figure;%image with 32 discrete levelsimshow(J);figure;imhist(J);4.直方图规定化程序举例% HISTGRAM REGULIZATIONclc;%Clear command windowI=imread('tire.tif');%reads the image in tire.tif into IJ=histeq(I,32);%transforms the intensity image I,returning in%J an intensity image with 32 discrete levels[counts,x]=imhist(J);%displays a histogram for the intensity image IQ=imread('pout.tif');%reads the image in tire.tif into Ifigure;imshow(Q);figure;imhist(Q);M=histeq(Q,counts);%transforms the intensity image Q so that the%histogram of the output image M approximately matches counts figure;imshow(M);figure;imhist(M);空域滤波增强部分程序1.线性平滑滤波I=imread('eight.tif');J=imnoise(I,'salt & pepper',0.02);subplot(221),imshow(I)title('原图像')subplot(222),imshow(J)title('添加椒盐噪声图像')K1=filter2(fspecial('average',3),J)/255;%应用3*3邻域窗口法subplot(223),imshow(K1)title('3x3窗的邻域平均滤波图像')K2=filter2(fspecial('average',7),J)/255;%应用7*7邻域窗口法subplot(224),imshow(K2)title('7x7窗的邻域平均滤波图像')2.中值滤波器MATLAB中的二维中值滤波函数medfit2来进行图像中椒盐躁声的去除%IMAGE NOISE REDUCTION WITH MEDIAN FILTERclc;hood=3;%滤波窗口[I,map]=imread('eight.tif');imshow(I,map);noisy=imnoise(I,'salt & pepper',0.05);figure;imshow(noisy,map);filtered1=medfilt2(noisy,[hood hood]);figure;imshow(filtered1,map);hood=5;filtered2=medfilt2(noisy,[hood hood]);figure;imshow(filtered2,map);hood=7;filtered3=medfilt2(noisy,[hood hood]);figure;imshow(filtered3,map);3. 4邻域8邻域平均滤波算法% IMAGE NOISE REDUCTION WITH MEAN ALGORITHM clc;[I,map]=imread('eight.tif');noisy=imnoise(I,'salt & pepper',0.05);myfilt1=[0 1 0;1 1 1;0 1 0];%4邻域平均滤波模版myfilt1=myfilt1/9;%对模版归一化filtered1=filter2(myfilt1,noisy);imshow(filtered1,map);myfilt2=[1 1 1;1 1 1;1 1 1];myfilt2=myfilt2/9;filtered2=filter2(myfilt2,noisy);figure;imshow(filtered2,map);频域增强程序举例1.低通滤波器% LOWPASS FILTERclc;[I,map]=imread('eight.tif');noisy=imnoise(I,'gaussian',0.05);imshow(noisy,map);myfilt1=[1 1 1;1 1 1;1 1 1];myfilt1=myfilt1/9;filtered1=filter2(myfilt1,noisy);figure;imshow(filtered1,map);myfilt2=[1 1 1;1 2 1;1 1 1];myfilt2=myfilt2/10;filtered2=filter2(myfilt2,noisy); figure;imshow(filtered2,map);myfilt3=[1 2 1;2 4 2; 1 2 1]; myfilt3=filter2(myfilt3,noisy); figure;imshow(filtered3,map);2.布特沃斯低通滤波器图像实例I=imread('saturn.png');J=imnoise(I,'salt & pepper',0.02); subplot(121),imshow(J)title('含噪声的原图像')J=double(J);f=fft2(J);g=fftshift(f);[M,N]=size(f);n=3;d0=20;n1=floor(M/2);n2=floor(N/2);for i=1:M;for j=1:N;d=sqrt((i-n1)^2+(j-n2)^2);h=1/(1+0.414*(d/d0)^(2*n));g(i,j)=h*g(i,j);endendg=ifftshift(g);g=uint8(real(ifft2(g)));subplot(122),imshow(g)title('三阶Butterworth滤波图像')色彩增强程序举例1.真彩色增强实例:%真彩色图像的分解clc;RGB=imread('peppers.png');subplot(221),imshow(RGB)title('原始真彩色图像')subplot(222),imshow(RGB(:,:,1))title('真彩色图像的红色分量')subplot(223),imshow(RGB(:,:,2))title('真彩色图像的绿色分量')subplot(224),imshow(RGB(:,:,3))2.伪彩色增强举例:I=imread('cameraman.tif');imshow(I);X=grayslice(I,16);%thresholds the intensity image I using%threshold values 1/16,2/16,…..,15/16,returning an indexed %image in X figure;imshow(X,hot(16));3.假彩色增强处理程序举例[RGB]=imread('ghost.bmp');imshow(RGB);RGBnew(:,:,1)=RGB(:,:,3);RGBnew(:,:,2)=RGB(:,:,1);RGBnew(:,:,3)=RGB(:,:,2);figure;subplot(121);imshow(RGB);subplot(122);imshow(RGBnew);主要转载自:/s/blog_488c87020100cice.htm l。

matlab数字图像处理—图像增强

matlab数字图像处理—图像增强

图像增强图像增强的定义图像增强是指按特定的需要突出一幅图像中的某些信息,同时削弱或去除某些不需要的信息的处理方法,也是提高图像质量的过程[9]。

图像增强的目的是使图像的某些特性方面更加鲜明、突出,使处理后的图像更适合人眼视觉特性或机器分析,以便于实现对图像的更高级的处理和分析。

图像增强的过程往往也是一个矛盾的过程:图像增强希望既去除噪声又增强边缘。

但是,增强边缘的同时会同时增强噪声,而滤去噪声又会使边缘在一定程度上模糊,因此,在图像增强的时候,往往是将这两部分进行折中,找到一个好的代价函数达到需要的增强目的[10]。

传统的图像增强算法在确定转换函数时常是基于整个图像的统计量,如:ST 转换,直方图均衡,中值滤波,微分锐化,高通滤波等等。

这样对应于某些局部区域的细节在计算整幅图的变换时其影响因为其值较小而常常被忽略掉,从而局部区域的增强效果常常不够理想,噪声滤波和边缘增强这两者的矛盾较难得到解决。

常用的图像增强方法图像增强可分成两大类:空间域法和频率域法。

基于空间域的算法处理时直接对图像灰度级做运算;基于频率域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。

基于空间域的算法分为点运算算法和邻域去噪算法。

点运算算法即灰度级校正、灰度变换和直方图修正等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。

邻域增强算法分为图像平滑和锐化两种。

平滑一般用于消除图像噪声,但是也容易引起边缘的模糊。

常用算法有均值滤波、中值滤波。

锐化的目的在于突出物体的边缘轮廓,便于目标识别。

常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等。

基于频率域的算法把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。

采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。

图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。

matlab数字图像处理—图像增强汇总

matlab数字图像处理—图像增强汇总

图像增强图像增强的定义图像增强是指按特定的需要突出一幅图像中的某些信息,同时削弱或去除某些不需要的信息的处理方法,也是提高图像质量的过程[9]。

图像增强的目的是使图像的某些特性方面更加鲜明、突出,使处理后的图像更适合人眼视觉特性或机器分析,以便于实现对图像的更高级的处理和分析。

图像增强的过程往往也是一个矛盾的过程:图像增强希望既去除噪声又增强边缘。

但是,增强边缘的同时会同时增强噪声,而滤去噪声又会使边缘在一定程度上模糊,因此,在图像增强的时候,往往是将这两部分进行折中,找到一个好的代价函数达到需要的增强目的[10]。

传统的图像增强算法在确定转换函数时常是基于整个图像的统计量,如:ST 转换,直方图均衡,中值滤波,微分锐化,高通滤波等等。

这样对应于某些局部区域的细节在计算整幅图的变换时其影响因为其值较小而常常被忽略掉,从而局部区域的增强效果常常不够理想,噪声滤波和边缘增强这两者的矛盾较难得到解决。

常用的图像增强方法图像增强可分成两大类:空间域法和频率域法。

基于空间域的算法处理时直接对图像灰度级做运算;基于频率域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。

基于空间域的算法分为点运算算法和邻域去噪算法。

点运算算法即灰度级校正、灰度变换和直方图修正等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。

邻域增强算法分为图像平滑和锐化两种。

平滑一般用于消除图像噪声,但是也容易引起边缘的模糊。

常用算法有均值滤波、中值滤波。

锐化的目的在于突出物体的边缘轮廓,便于目标识别。

常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等。

基于频率域的算法把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。

采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。

图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。

matlab画一个局部放大的图中图(总结)

matlab画一个局部放大的图中图(总结)

matlab画一个局部放大的图中图(总结)照旧感谢原作者,分享者们,阿门!以下三种方法,szlqq345喜欢用第一种的。

第一种:magnify是个动态放大镜,固化后可以用tools>edit plot移动小图,能选取多个局部图,这个方法不错用法:打开figure图,输入magnify,左键动态选取查看,ctrl+左键固化,也可右键固化,‘<’和‘>’缩放方法范围,‘+’和‘-’缩放放大比例原帖:第二种:用起来也很方便,缺点是只能框选一处,不能选取多个。

原帖:美国学者Duane Hanselman and Bruce Littlefield编写的MasteringMATLAB7上的例子,实现图中图缩放功能,使用了3个函数,这三个函数在附件中,当然也可以到网站去下载。

函数简单介绍:getn()将get()函数的输出参数简化为单个变量;getbox()实现矩形区域的选择,并捕捉该区域的横纵标的范围mmzoom创建一个缩放坐标轴。

试图做了例子,传上来一起分享。

例子:x = -pi:pi/12:pi;y = tan(sin(x)) - sin(tan(x));plot(x,y,'--ro','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g', 'MarkerSize',7.5)mmzoom第三种:也可编个小程序,分别在两个图形句柄里画图,可以借鉴下原帖:代码;figure(1);h2=axes('position',[0 0 1 1]);axis(h2);x2=0:pi/50:2*pi;y2=sin(x2);h3=plot(x2,y2,'b-');h1=axes('position',[0.3 0.2 0.4 0.4]);axis(h1);x1=0:pi/50:2*pi;y1=cos(x1);h4=plot(x1,y1,'r-');hold onh=[h3; h4];str=['大图中的曲线';'小图中的曲线']; legend(h,str);。

图像的放大(或缩小)

图像的放大(或缩小)

教师评阅意见:签名:年月日实验成绩:一、实验目的:1.了解MATLAB的操作环境和基本功能。

2.掌握图像的放大(或缩小)的原理。

3.掌握MATLAB中图像的放大(或缩小)的实现方法,加强算法设计以及编程实现的能力。

二、实验主要内容及要求:1.任务:完成对图像放大(或缩小)n倍的操作。

三、实验设备及软件:PC机一台,MATBLAB软件四、设计方案任务一:1)首先选取一张合适的图片存放在MATLAB当前的工作文件夹下(Current Folder),因为只有在当前文件夹下,图像才能被读入,否则会提示文件不存在,并利用clc,clear函数完成清屏和清除变量的操作,清除变量是以免在程序运行时出现错误。

2)利用imread,im2double函数分别完成图像的读入和将图像像素点值转换到0-1之间的处理,以便后续操作。

利用size函数求出图像的的大小,即维度值。

然后利用zeros函数建立一个和原图像大小相等的二维零矩阵,用于存放处理后图像。

3)参照图像放大和缩小的公式,分别设计两个函数用于实现图像的放大和缩小处理。

4)设计一个主函数,参数c1为放大或缩小系数。

在主函数中判断 c1的大小,若小于一,则调用缩小函数,否则调用放大函数。

五、主要代码及必要说明:代码:缩小函数:function y=narrow(c1)close all;a=imread('coins.png'); imshow(a);a=im2double(a);[M,N]=size(a);b=[];for i=1:Mfor j=1:Nb(ceil(c1*i),ceil(c1*j))=a(i,j) ;endendfigure,imshow(b);end 放大函数:function y=expand(c1)close all;a=imread('coins.png'); imshow(a);a=im2double(a);[M,N]=size(a);b=[];for i=1:(M*c1)for j=1:(N*c1)b(i,j)=a(ceil(i/c1),ceil(j/c1)) ;endendfigure;imshow(b);end主函数:function y=bianhuan(c1)if c1<1narrow(c1);elseexpand(c1);endend六、测试结果及说明:因为在matlab中可以进行函数调用,所以直接调用主函数bianhuan(),第一传入的参数为1.3,第二次传入的参数为0.7,结果如下图:放大1.3倍的图像原图和缩小0.7倍的图像七、实验体会:。

图像增强的matlab源代码带注释

图像增强的matlab源代码带注释

代码一:% 2.灰度线性变换,利用imadjust函数对图像局部灰度范围进行扩展% MATLAB 程序实现如下:I=imread('e.jpg');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I); %图像I必须为彩色图像subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J);title('线性变换图像[0.1 0.5]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1]%imadjust(I1,[a b],[])中a和b的值越接近零,图像越亮subplot(2,2,4),imshow(K);title('线性变换图像[0.3 0.7]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系%注释:% Matlab函数rgb2gray简介% 函数功能:将真彩色图像转换为灰度图像。

% 调用格式:I = rgb2gray(RGB)% 将真彩色RGB图像转换成灰度图像。

(RGB并不发生变化)% newmap = rgb2gray(map) 返回一个灰度调色板。

% 相关函数:ind2gray, mat2gray, ntsc2rgb, rgb2ind, rgb2ntsc\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\代码二:%利用均值滤波器对图像进行平滑处理,噪声得到了有效的去除%并且选择模版的尺寸越大,噪声的去除效果越好,同时图像边缘细节越模糊clear all;I=imread('e.jpg');M=rgb2gray(I);%创建均值滤波器模版H1=ones(3)/9;H2=ones(7)/49;%添加高斯噪声,均值为0,方差为0.02J=imnoise(M,'gaussian',0,0.02);%转化J为double数据类型J=double(J);%均值滤波G1=conv2(J,H1,'same');G2=conv2(J,H2,'same');%图像显示subplot(2,2,1);imshow(M);title('原始图像');subplot(2,2,2);imshow(J,[]);title('添加高斯噪声图像');subplot(2,2,3);imshow(G1,[]);title('3*3均值滤波图像');subplot(2,2,4);imshow(G2,[]);title('7*7均值滤波图像');\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 代码三:%利用阈值对图像进行平滑处理,噪声得到了有效的去除%并且和3*3滤波器相比,阈值法去噪效果更明显clear all;I=imread('e.jpg');M=rgb2gray(I);[m n]=size(M);T=50;%设定阈值G=[]; %创建数组用来存储新得到的图像像素值%创建均值滤波器模版H1=ones(3)/9;%添加椒盐噪声J=imnoise(M,'salt & pepper',0.05);%转化J为double数据类型J=double(J); %用于卷积公式时要转化为双精度%均值滤波G1=conv2(J,H1,'same');%G2=conv2(J,H2,'same');%图像显示for i=1:mfor j=1:nif abs(J(i,j)-G1(i,j))>TG(i,j)=G1(i,j);elseG(i,j)=J(i,j);endendendsubplot(2,2,1);imshow(M);title('原始图像');subplot(2,2,2);imshow(J,[]);title('添加椒盐噪声图像');subplot(2,2,3);imshow(G1,[]);title('3*3均值滤波图像');subplot(2,2,4);imshow(G,[]);title('超限像素平滑图像');\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 代码四:%利用中值滤波去噪clear all;I=imread('e.jpg');M=rgb2gray(I);N1=imnoise(M,'salt & pepper',0.04);N2=imnoise(M,'gaussian',0,0.02);N3=imnoise(M,'speckle',0.02); %添加乘性噪声G1=medfilt2(N1); %中值滤波去噪G2=medfilt2(N2);G3=medfilt2(N3);subplot(2,3,1);imshow(N1);title('添加椒盐噪声图像');subplot(2,3,2);imshow(N2);title('添加高斯噪声');subplot(2,3,3);imshow(N3);title('添加乘性噪声');subplot(2,3,4);imshow(G1);title('椒盐噪声中值滤波图像');subplot(2,3,5);imshow(G2);title('高斯噪声中值滤波图像'); subplot(2,3,6);imshow(G3);title('乘性噪声中值滤波图像');。

magnify matlab源程序

magnify matlab源程序

magnify matlab源程序以下是一个简单的 MATLAB 源程序,用于实现图片的放大功能: % 以下代码实现了图片的放大功能% 输入的变量 im 是一个三维 RGB 图像矩阵,factor 是放大因子 % 输出的变量 im_scaled 是一个放大后的三维 RGB 图像矩阵function im_scaled = magnify(im, factor)% 读取输入的图片大小[height, width, ~] = size(im);% 通过放大因子计算新的图片大小new_height = round(height * factor);new_width = round(width * factor);% 通过双线性插值法计算新的像素值,并把结果存储到输出矩阵中 for i = 1:new_heightfor j = 1:new_widthy = y_ratio * (i-1) + 1;x = x_ratio * (j-1) + 1;y1 = floor(y);y2 = ceil(y);x1 = floor(x);x2 = ceil(x);if x1 == x2x2 = x1 + 1;endif y1 == y2y2 = y1 + 1;endf11 = double(im(y1, x1, :));f12 = double(im(y2, x1, :));f21 = double(im(y1, x2, :));f22 = double(im(y2, x2, :));dx = x - x1;dy = y - y1;im_scaled(i,j,:) = uint8((1-dx)*(1-dy)*f11 + dx*(1-dy)*f21 +(1-dx)*dy*f12 + dx*dy*f22);endend% 显示原始图片和放大后的图片subplot(1, 2, 1);imshow(im);title('原始图片');subplot(1, 2, 2);imshow(im_scaled);title('放大后的图片');end该程序的功能是将输入的 RGB 图片矩阵进行放大,输出结果是放大后的图片矩阵。

数字图像处理中图像增强的四种matlab编程方法

数字图像处理中图像增强的四种matlab编程方法

数字图像处理中图像增强的四种matlab编程方法图像增强处理log图像增强程序:clear allclose alliptsetpref('ImshowBorder', 'tight')im1 = imread('f:\照片\57.jpg')%im5 =rgb2gray(im1)figureimshow(im1)im2=log(1+double(im1))*0.2%im3=imadjust(im2,[0.5 1],[0.1 0.5],0.6) figure imshow(im2)原图像Log 系数0.2时系数0.3系数为0.1时由图片看出当C在0.2附近时,图像效果有了明显的改善,当大于0.3时,图像白色加重,而当其小于0.1时,图像黑色加重.指数图像增强:程序clear allclose alliptsetpref('ImshowBorder', 'tight')im1 = imread('f:\照片\57.jpg')%im5 =rgb2gray(im1)figureimshow(im1)im3=log(double(im1))im2=exp(double(im3))*0.01figureimshow(im2)原图像系数为0.001时系数为0.02系数为0.01系数为0.06由图片看出当C在0.02附近时,图像效果有了明显的改善,当大于0.06时,图像白色加重,而当其小于0.01时,图像黑色加重.绝对值图像增强程序:clear allclose alliptsetpref('ImshowBorder', 'tight')im1 = imread('f:\照片\57.jpg')%im5 =rgb2gray(im1)figureimshow(im1)im2=abs(double(im1))*0.01 其中调整系数为cfigureimshow(im2)原图像系数为0.015时系数为0.03时系数为0.005时由图片看出当C在0.015附近时,图像效果有了明显的改善,当大于0.003时,图像白色加重,而当其小于0.005时,图像黑色加重开方图像增强程序:clear allclose alliptsetpref('ImshowBorder', 'tight')im1 = imread('f:\照片\57.jpg')%im5 =rgb2gray(im1)figureimshow(im1)im2=sqrt(double(im1))*0.08%im3=imadjust(im2,[0.5 1],[0.1 0.5],0.6) figure imshow(im2)原图像系数为0.03时系数为0.05时系数为0.005时由图片看出当C在0.03附近时,图像效果有了明显的改善,当大于0.05时,图像白色加重,而当其小于0.005时,图像黑色加重。

图像变换与增强matlab程序

图像变换与增强matlab程序

试验一 MATLAB图像增强与变换处理实验试验一 MATLAB图像增强与变换处理实验一、实验目的1、熟悉掌握数字图像处理的基本概念。

2、了解MATLAB的的编程环境,图像处理工具箱的使用方法。

3、掌握数字图像处理图像增强的基本方法。

4、掌握图像变换的基本方法。

5、学会使用MATLAB完成图像处理的主要功能。

二、实验任务(1)各种格式的数字图像的读取、显示、存储。

(2)图像的空域增强方法。

(3)图像的频率域增强方法。

(4)图像的锐化增强方法。

(5)图像的快速傅里叶变换与反变换。

三、实验配套的主要仪器设备及台(套)数教师示范用投影仪一台微型计算机每个学生一台四、报告要求完成实验任务的每一步,并记录每一步的实验结果。

图1 原始图像图 2 转化为灰度图像的图像(1)各种格式的数字图像的读取、显示、存储将该图像放入MATLAB的work文件夹中。

在.m文件中输入以下代码:clear all;close all;f=imread('1.jpg'); %读入原图像文件f1=rgb2gray(f); %将彩色图片转换为灰度图imshow(f1);imwrite(f1,'gai0.jpg');imwrite(f1,'gai1.png');imwrite(f1,'gai2.bmp');imwrite(f1,'gai3.tiff');(2)则把彩色图片转化为灰度图,,显示图像为图2。

同时我们可以在工作区中输入imfinfo gai0.jpg;,我们可以得到我们保存后图片的相关信息,其输入结果如下:Filename: 'gai1.png'FileModDate: '01-May-2012 20:14:13'FileSize: 414165Format: 'png'FormatVersion: []Width: 1024Height: 768BitDepth: 8ColorType: 'grayscale'FormatSignature: [137 80 78 71 13 10 26 10]Colormap: []Histogram: []InterlaceType: 'none'Transparency: 'none'SimpleTransparencyData: []BackgroundColor: []RenderingIntent: []Chromaticities: []Gamma: []XResolution: []YResolution: []ResolutionUnit: []XOffset: []OffsetUnit: []SignificantBits: []ImageModTime: '1 May 2012 12:14:13 +0000'Title: []Author: []Description: []Copyright: []CreationTime: []Software: []Disclaimer: []Warning: []Source: []Comment: []OtherText: []同理我们可以得到其他三种格式的图像的相关信息。

使用双线性插值法放大图像(matlab实现)

使用双线性插值法放大图像(matlab实现)

使⽤双线性插值法放⼤图像(matlab实现)双线性插值的概念及公式可以参考百度,这⾥仅对算法原理进⾏简单的说明:双线性插值计算公式:f(i+u,j+v) = (1-u)(1-v)f(i,j)+u(1-v)f(i+1,j)+(1-u)vf(i,j+1)+ uvf(i+1,j+1)这个公式表明了如何利⽤矩阵中的四个像素值计算新的像素值,这些新的像素值就组成了放⼤后的图像。

下图是如何将3x3的图像放⼤为4x4的图像:原图像表⽰为3x3的矩阵(像素值处在⿊线的交叉点上),如何计算4x4矩阵的值呢?(像素值处在红⾊虚线交叉点及红线与⿊线的交点上)⽐如新图像B的第⼀列与原图像A的第⼀列的对应关系是:B(1,1) = A(1,1)B(1,2) = A(1,1.66667)B(1,3) = A(1,2.33334)B(1,4) = A(1,3.00001)应⽤上⾯的公式,实际上就是⽤A的含有⼩数点的位置的像素值来计算B的像素值,但含有⼩数点位的像素是不存在的,这⾥称为虚拟位置。

⽤原图像A的值就能计算出放⼤后B的值,是不是很神奇?实际上可以这样认为:双线性插值就是把放⼤后的图像再压缩到原来图像的尺⼨⼤⼩,计算原图像中虚拟的像素值,等同于计算放⼤后图像的像素值,对于本例来说,B图像的步长相当于A图像步长的(3-1)/(4-1)=0.66667倍。

下⾯我们就可以利⽤这个⽐率来对应B中像素位置与A中虚拟像素位置的关系。

B(1,1) = A(1,1) (1-1)*0.66667+1=1B(1,2) = A(1,1.66667) (2-1)*0.66667+1=1.66667B(1,3) = A(1,2.33334) (3-1)*0.66667+1=2.33334B(1,4) = A(1,3.00001) (4-1)*0.66667+1=3.00001根据上⾯的对应关系,我们就可以⽤代码实现了。

现在还有⼀个问题:我们计算虚拟像素值是需要周围四个原像素值,⽐如上列中的(下图中红圈圈住的部分)A(1,3) = (1-0)(1-0)A(1,3) + (1-0)0A(1,4) + 0(1-0)A(2,3) + 00A(2,4)显然这⾥的A(1,4)和A(2,4)是⽆法索引到得,因为原图像是3x3的矩阵。

matlab练习程序(图像放大缩小,双立方插值)

matlab练习程序(图像放大缩小,双立方插值)

matlab练习程序(图像放⼤缩⼩,双⽴⽅插值) 我主要参考了,不过他推导的系数我感觉有问题,⽤他的公式直接套⽤放⼤的图像会有⽹格,也许是我理解的有偏差。

所以我⾃⼰重新推导了这四个系数 ⽤这个就没问题了。

他的那些代码还是很有参考价值的。

程序代码:main.mclear all;close all;clc;w=2; %放⼤或缩⼩的宽度h=2; %放⼤或缩⼩的⾼度img=imread('lena.jpg');%imshow(img);[m n]=size(img);imgn=zeros(h*m,w*n);rot=[h 00;0 w 0;001]; %变换矩阵x=h*u,y=w*vfor i=1:h*mfor j=1:w*npix=[i j 1]/rot;float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1) < 2 %边界处理,也可以⽤卷积时常⽤的边界扩展防⽌越界pix(1) = 2;endif pix(1) > m-2pix(1) = m-2;endif pix(2) < 2pix(2) =2;endif pix(2) > n-2pix(2) =n-2;endpix_up=floor(pix(1));pix_left=floor(pix(2));p=img(pix_up-1:pix_up+2,pix_left-1:pix_left+2);imgn(i,j)=bicubicInterpolate(p,float_X+1,float_Y+1);endendfigure,imshow(uint8(imgn))bicubicInterpolate.mfunction re=bicubicInterpolate(p,x,y) %先⾏插值,再列插值arr=zeros(4,1);for i=1:4arr(i)=cubicInterpolate(p(i,1:4),x);endre= cubicInterpolate(arr,y);endcubicInterpolate.mfunction re=cubicInterpolate(p,x)p=double(p);% re=p(2) + 0.5 * x*(p(3) - p(1) + x*(2.0*p(1) - 5.0*p(2) + 4.0*p(3) - p(4) + x*(3.0*(p(2) - p(3)) + p(4) - p(1))));a=(p(4)-3*p(1)+3*p(2)-p(1))/10;b=(p(3)-2*p(2)+p(1))/2-2*a;c=p(2)-p(1)-a-b;d=p(1);re=a*x^3+b*x^2+c*x+d;end效果图:原图双⽴⽅插值效果双线性插值效果区别不⼤,不过认真看双⽴⽅还是效果好些。

Matlab中的图像增强技术与算法

Matlab中的图像增强技术与算法

Matlab中的图像增强技术与算法引言图像增强是数字图像处理的重要领域之一,其目标是改善图像的视觉质量或提取图像中的相关信息。

在Matlab中,有许多强大的图像增强技术和算法可供使用,本文将深入探讨其中的一些方法和应用。

一、直方图均衡化直方图均衡化是一种经典的图像增强技术,其原理是通过改变图像的灰度级分布来增强图像的对比度。

在Matlab中,可以使用histeq函数来实现直方图均衡化。

该函数可以将图像的直方图拉伸到整个灰度级范围内,使图像的细节更加明显。

二、滤波器滤波器在图像增强中起着重要的作用,可以去除图像中的噪声或强化图像中的某些特征。

在Matlab中,有多种滤波器可供选择,如线性滤波器、非线性滤波器等。

其中,常用的线性滤波器有均值滤波器、中值滤波器和高斯滤波器。

这些滤波器可以通过调整参数来平滑图像或增强图像的边缘。

三、小波变换小波变换是一种多尺度分析方法,可以将信号或图像分解为低频部分和高频部分。

在图像增强中,小波变换可以用于去噪、边缘检测和图像压缩等方面。

在Matlab中,可以使用wavedec和waverec函数来进行小波变换和逆变换。

通过选择不同的小波基函数,可以得到不同的图像增强效果。

四、图像分割图像分割是将图像划分为若干个子区域的过程,旨在将同一区域内的像素归为一类。

在Matlab中,有多种图像分割算法可供选择,如基于阈值的分割、基于区域的分割和基于边缘的分割等。

这些算法可以通过提取图像的纹理特征或边缘信息来实现图像的分割和增强。

五、图像去噪图像去噪是图像增强的关键步骤之一,其目标是消除图像中的噪声以提高图像的质量和清晰度。

在Matlab中,有多种去噪算法可供选择,如均值滤波、中值滤波、小波去噪和总变分去噪等。

这些算法通过平滑图像的灰度值或提取图像的结构信息来实现去噪效果。

六、图像增强应用图像增强在许多应用领域都具有重要的意义。

例如,在医学图像处理中,图像增强可以用于增强CT扫描图像或MRI图像中的病灶区域;在遥感图像处理中,图像增强可以用于增强卫星图像中的地物边缘和纹理特征。

图像处理新技术的问题解答和图像旋转放大的matlab程序

图像处理新技术的问题解答和图像旋转放大的matlab程序

1. 在网络上应采用什么格式的图片?叙述一下该图片文件格式结构在网络上一般采用JPG/JPEG或GIF格式的图片,[1] jpg全名应该是JPEGJPEG:联合摄影专家组JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的jpg/jpeg是24位的图像文件格式,24 位颜色存储单个光栅图像。

也是一种高效率的压缩格式,JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。

文件格式是JPEG(联合图像专家组)标准的产物,是面向连续色调静止图像的一种压缩标准。

其最初目的是使用64Kbps的通信线路传输720×576 分辨率压缩后的图像。

通过损失极少的分辨率,可以将图像所需存储量减少至原大小的10%。

由于其高效的压缩效率和标准化要求,目前已广泛用于彩色传真、静止图像、电话会议、印刷及新闻图片的传送上。

JPEG文件格式介绍JPEG文件使用的数据存储方式有多种。

最常用的格式称为JPEG文件交换格式(JPEG File Interchange Format,JFIF)。

而JPEG文件大体上可以分成两个部分:标记码(Tag)和压缩数据。

标记码由两个字节构成,其前一个字节是固定值0xFF,后一个字节则根据不同意义有不同数值。

在每个标记码之前还可以添加数目不限的无意义的0xFF填充,也就说连续的多个0xFF可以被理解为一个0xFF,并表示一个标记码的开始。

而在一个完整的两字节的标记码后,就是该标记码对应的压缩数据流,记录了关于文件的诸种信息。

整个文件的大体结构JFIF格式的JPEG文件(*.jpg)的一般顺序为:SOI(0xFFD8)APP0(0xFFE0)[APPn(0xFFEn)]可选DQT(0xFFDB)SOF0(0xFFC0)DHT(0xFFC4)SOS(0xFFDA)压缩数据EOI(0xFFD9)常用的标记有SOI、APP0、DQT、SOF0、DHT、DRI、SOS、EOI。

matlab实现图像的放大及旋转

matlab实现图像的放大及旋转

MATLAB是一个包含大量计算算法的集合。

其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。

函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。

在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。

MATLAB的这些函数集包括从最简单最基本的函数到诸如距阵,特征向量、快速傅立叶变换的复杂函数。

图像的几何操作一、图像的基本运算1、加法运算图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。

直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通信方式传送的图像(如卫星图像),这种处理是必不可少的。

在MA TLAB7.0中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。

imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输入图像。

imadd函数的调用格式可参考图像处理的工具箱。

下面的程序可将图1两幅图像叠加在一起,叠加效果如图2所示。

imshow('rice.png');imshow('cameraman.tif');I=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J,'uint16');%大小必须一样imshow(K,[])图1 图2给图像的每一个像素加上一个常数可以使图像的亮度增加。

例如以下程序示例的处理效果如图3所示。

I=imread('rice.png');J=imadd(I,50);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);图32、减法运算图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。

在Matlab中进行图像增强的常用方法和技巧

在Matlab中进行图像增强的常用方法和技巧

在Matlab中进行图像增强的常用方法和技巧引言:图像增强是图像处理中的一项重要工作,它可以使图像更加清晰、亮度更加均匀,从而更好地展示图像的细节和特征。

而Matlab作为一款功能强大的数学计算软件,提供了许多图像处理的函数和工具箱,可以帮助用户实现图像增强。

本文将介绍一些在Matlab中常用的图像增强方法和技巧。

一、直方图均衡化直方图均衡化是一种常用的图像增强方法,它可以通过调整图像的像素亮度分布,使得图像的对比度更加明显。

在Matlab中,可以使用histeq函数来实现直方图均衡化。

以下是一个示例:```image = imread('image.jpg');enhanced_image = histeq(image);```通过对图像的直方图进行统计分析,histeq函数可以将图像的像素值重新映射到一个更广的像素值范围内,从而增强图像的对比度。

二、图像滤波图像滤波是另一种常用的图像增强方法,它可以通过去除图像中的噪声和干扰,使得图像更加清晰和平滑。

在Matlab中,可以使用imfilter函数来实现各种滤波操作。

以下是一些常用的图像滤波方法:1. 均值滤波:使用imfilter函数的fspecial参数可以创建一个均值滤波器,然后通过imfilter函数的'conv'选项来对图像进行滤波。

```image = imread('image.jpg');filter = fspecial('average', [3, 3]);filtered_image = imfilter(image, filter, 'conv');```2. 中值滤波:使用medfilt2函数可以对图像进行中值滤波,该函数对图像中的每个像素取相邻像素的中值作为滤波结果。

```image = imread('image.jpg');filtered_image = medfilt2(image);```3. 高斯滤波:使用imfilter函数的fspecial参数可以创建一个高斯滤波器,然后通过imfilter函数的'conv'选项来对图像进行滤波。

matlab中的图像增强实验附程序代码

matlab中的图像增强实验附程序代码

matlab中的图像增强实验附程序代码图像增强实验⼀:试验⽬的熟悉并掌握数字图像空域增强:空域变换增强,空域滤波增强⼆:实验内容(1)直⽅图均衡化进⾏图像增强代码: imag=imread('pout.tif'); imag=im2double(imag);subplot(2,2,1);imshow(imag);title('原始图像');subplot(2,2,2);imhist(imag);title('原始图像的直⽅图'); imag1=histeq(imag);subplot(2,2,3);imshow(imag1);title('直⽅图均衡化后的图像');subplot(2,2,4);imhist(imag1);title('直⽅图均衡化后的图像的直⽅图'); 直⽅图均衡化进⾏图像增强效果图(2)对图像加⼊椒盐噪声,并分别⽤中值滤波和⾃适应的⽅法进⾏去噪处理的代码:imag2=imnoise(imag,'salt',0.02); imag3=medfilt2(imag2); imag4=wiener2(imag2);subplot(2,2,1);imshow(imag);title('原始图像');subplot(2,2,2);imshow(imag2);title('加⼊椒盐噪声后的图像'); subplot(2,2,3);imshow(imag3);title('进⾏中值滤波后的图像'); subplot(2,2,4);imshow(imag4);title('进⾏⾃适应滤波后的图像');对图像加⼊椒盐噪声,并分别⽤中值滤波和⾃适应的⽅法进⾏去噪处理的效果原始图像0.51原始图像的直⽅图直⽅图均衡化后的图像0.510直⽅图均衡化后的图像的直⽅图(3)对⽐度增强代码:I=imread('C:\Documents and Settings\Administrator\桌⾯\测试图像\rice.tif'); J=imadjust(I,[0.3,0.7],[]); subplot(2,2,1);imshow(I);title('原始图像'); subplot(2,2,2);imshow(J);title('');subplot(2,2,3);imhist(I);title('原始图像的灰度直⽅图');subplot(2,2,4);imhist(J);title('进⾏对⽐度增强后的图像的灰度直⽅图'); 对⽐度增强效果原始图像加⼊椒盐噪声后的图像进⾏中值滤波后的图像进⾏⾃适应滤波后的图像原始图像10020005001000原始图像的灰度直⽅图1002000500100015002000进⾏对⽐度增强后的图像的灰度直⽅图。

图像放大算法总结及MATLAB源程序

图像放大算法总结及MATLAB源程序

1,插值算法(3种):(1)最邻近插值(近邻取样法):最邻近插值的的思想很简单,就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色。

可见,最邻近插值简单且直观,速度也最快,但得到的图像质量不高。

最邻近插值法的MA TLAB源代码为:A = imread('F:\lena.jpg');%读取图像信息imshow(A); %显示原图title('原图128*128');Row = size(A,1); Col = size(A,2);%图像行数和列数nn=8;%放大倍数m = round(nn*Row);%求出变换后的坐标的最大值n = round(nn*Col);B = zeros(m,n,3);%定义变换后的图像for i = 1 : mfor j = 1 : nx = round(i/nn); y = round(j/nn);%最小临近法对图像进行插值if x==0 x = 1; endif y==0 y = 1; endif x>Row x = Row; endif y>Col y = Col;endB(i,j,:) = A(x,y,:);endendB = uint8(B);%将矩阵转换成8位无符号整数figure;imshow(B);title('最邻近插值法放大8倍1024*1024');运行程序后,原图如图1所示:图1用最邻近插值法放大4倍后的图如图2所示:图2(2)双线性内插值法:在双线性内插值法中,对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中i、j均为非负整数,u、v为[0,1)区间的浮点数,则这个像素得值f(i+u,j+v) 可由原图像中坐标为(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。

Matlab中的图像增强技术介绍

Matlab中的图像增强技术介绍

Matlab中的图像增强技术介绍图像增强是数字图像处理中的一项重要技术,它可以改善图像的质量并突出图像中的细节。

在Matlab中,有多种图像增强方法可供选择,下面将介绍一些常见的技术。

一、直方图均衡化直方图均衡化是一种用于增强图像对比度的方法。

它通过自动调整图像的亮度分布,使得图像的亮度范围更加均匀。

在Matlab中,我们可以使用imhist函数获取图像的直方图,并利用histeq函数进行均衡化。

例如,下面的代码将对一幅灰度图像进行直方图均衡化:```matlabimg = imread('image.jpg');img_eq = histeq(img);```二、锐化锐化是一种增强图像细节的方法,它可以使图像中的边缘更加清晰。

在Matlab 中,我们可以使用imsharpen函数对图像进行锐化处理。

该函数使用了非线性的锐化算法,可以提高图像的边缘对比度。

例如,下面的代码将对一幅灰度图像进行锐化:```matlabimg = imread('image.jpg');img_sharpened = imsharpen(img);```三、滤波滤波是一种能够去除图像中噪声的方法,它可以平滑图像并减少噪点的影响。

在Matlab中,我们可以使用各种滤波器函数对图像进行滤波处理。

例如,下面的代码将对一幅灰度图像进行中值滤波:```matlabimg = imread('image.jpg');img_filtered = medfilt2(img);```除了中值滤波外,Matlab还提供了均值滤波、高斯滤波等多种滤波器函数。

四、图像增强算法除了上述方法外,还有一些更复杂的图像增强算法可供选择。

例如,基于小波变换的图像增强算法可以提高图像的细节和对比度。

在Matlab中,我们可以使用wavedec2函数对图像进行小波变换,并进一步利用小波系数对图像进行增强处理。

图像处理作业(MATLAB的数字图像增强应用)

图像处理作业(MATLAB的数字图像增强应用)

图像处理作业(MATLAB的数字图像增强应用)目录MATLAB的数字图像增强应用 (2)前言 (2)一、数字图像处理的历史与发展应用 (2)二、MATLAB与数字图像处理 (3)(一)MATLAB简介 (3)(二)MATLAB用于数字图像增强的优势 (4)(三)基于MATLAB的图像增强方法和算法 (4)三、图像增强应用 (6)(一)直方图增强 (6)(二)直方图均衡化 (9)(三)图像二值化 (12)(四)对比度增强 (13)1.伪彩色增强 (16)2.真色彩增强 (17)四、实训总结 (18)MATLAB的数字图像增强应用前言基于数字图像增强对图像处理的重要性,将计算软件MATLAB应用于数字图像增强中,使用这一软件完成图像的对比度增强、直方图均衡化、平滑滤波、锐化、彩色增强等操作,并给出了处理前后的对照图像。

同时论述了MATLAB在进行图像处理试验时简洁、高效的特点。

关键词:图像增强,MATLAB,直方图均衡化,平滑滤波,锐化,彩色。

一、数字图像处理的历史与发展应用数字图像处理是20世纪60年代发展起来的一门新兴学科。

随着微型计算机性能的提高,数字图像处理技术也得到了广泛的普及,当前图像处理技术在工业自动化、工业检测、医学、遥感探测等各个方面都发挥着十分重要的作用。

对于图像处理系统来说,处理流程基本可以划分为三个阶段,首先是对获得的原始图像进行预处理;其次是抽取图像特征;最后是识别分析。

其中图像预处理阶段即图像增强阶段极为重要,如果此阶段选择的处理方式不当,后面的工作将很难得成功。

在具体的应用过程中,获取的原始图像未必是最适合处理的,例如由于光照、移动、噪声等原因,导致了图像的质量不高。

但是受条件所限又不能再次取样,这就需要对采集的图像进行增强,使其比原始图像更适合于特定的应用。

因为针对的具体应用并不相同,因此图像增强并没有通用的理论。

其具体的方法分为两大类:空间域方法和频域方法。

“空间域”一词是指图像平面自身,这类方法是以对图像的像素点直接处理为基础的,通过点运算处理将产生一幅新的图像,是一种既简单又重要的图像处理技术。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1,插值算法(3种):
(1)最邻近插值(近邻取样法):
最邻近插值的的思想很简单,就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色。

可见,最邻近插值简单且直观,速度也最快,但得到的图像质量不高。

最邻近插值法的MATLAB源代码为:
A=imread('F:\lena.jpg');%读取图像信息
imshow(A);%显示原图
title('原图128*128');
Row=size(A,1);Col=size(A,2);%图像行数和列数
nn=8;%放大倍数
m=round(nn*Row);%求出变换后的坐标的最大值
n=round(nn*Col);
B=zeros(m,n,3);%定义变换后的图像
for i=1:m
for j=1:n
x=round(i/nn);y=round(j/nn);%最小临近法对图像进行插值
if x==0x=1;end
if y==0y=1;end
if x>Row x=Row;end
if y>Col y=Col;end
B(i,j,:)=A(x,y,:);
end
end
B=uint8(B);%将矩阵转换成8位无符号整数
figure;
imshow(B);
title('最邻近插值法放大8倍1024*1024');
运行程序后,原图如图1所示:
图1
用最邻近插值法放大4倍后的图如图2所示:
图2
(2)双线性内插值法:
在双线性内插值法中,对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中i、j均为非负整数,u、v为[0,1)区间的浮点数,则这个像素得值f(i+u,j+v)可由原图像中坐标为(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1)
其中f(i,j)表示源图像(i,j)处的的像素值,以此类推。

这就是双线性内插值法。

双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。

由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。

在MATLAB中,可用其自带的函数imresize()来实现双线性内插值算法。

双线性内插值算法的MATLAB源代码为:
A=imread('F:\lena.jpg');
imshow(A);
title('原图128*128');
C=imresize(A,8,'bilinear');%双线性插值figure;
imshow(C);
title('双线性内插值法放大8倍1024*1024');程序运行后,原图如图3所示:
图3
双线性内插值法放大8倍后的图如图4所示:
图4
(3)双三次插值法:
双三次插值法能够在很大程度上克服以上两种算法的不足,该算法计算精度高,但计算量大,它考虑一个浮点坐标(i+u,j+v)周围的16个邻点。

目的像素值f(i+u,j+v)可由如下插值公式得到:f(i+u,j+v)=[A]*[B]*[C]
其中[A]=[S(u+1)S(u+0)S(u-1)S(u-2)];
[C]=[S(v+1)S(v+0)S(v-1)S(v-2)]T;
而[B]是周围16个邻点组成的4*4的矩阵;S(x)是对Sin(x*π)/x的逼近。

在MATLAB中,可用其自带的函数imresize()来实现双三次插值算法。

MATLAB源代码为:
A=imread('F:\lena.jpg');%读取原图像
D=imresize(A,8,'bicubic');%双三次插值放大8倍
figure;
imshow(D);
title('三次卷积法放大8倍1024*1024');
MATLAB自带双三次插值法运行结果如图5所示:
图5
也可以自己编写双三次插值算法MATLAB代码如下:clc,clear;
ff=imread('F:\lena.jpg');%读取图像到ff
k=8;%设置放大倍数
[m,n,color]=size(ff);
f=zeros(m,n);%将彩色图像ff转换为黑白图像f for i=1:m
for j=1:n
f(i,j)=ff(i,j);
end
end
a=f(1,:);c=f(m,:);%将待插值图像矩阵前后各扩展两行两列,共扩展四行四列
b=[f(1,1),f(1,1),f(:,1)',f(m,1),f(m,1)];d=[f(1,n),f(1,n),f(:,n)',f(m,n),f(m,n)];
a1=[a;a;f;c;c];
a1';
b1=[b;b;a1';d;d];
f=b1';f1=double(f);
for i=1:k*m%利用双三次插值公式对新图象所有像素赋值
u=rem(i,k)/k;i1=floor(i/k)+2;
A=[sw(1+u)sw(u)sw(1-u)sw(2-u)];
for j=1:k*n
v=rem(j,k)/k;j1=floor(j/k)+2;
C=[sw(1+v);sw(v);sw(1-v);sw(2-v)];
B=[f1(i1-1,j1-1)f1(i1-1,j1)f1(i1-1,j1+1)f1(i1-1,j1+2)
f1(i1,j1-1)f1(i1,j1)f1(i1,j1+1)f1(i1,j1+2)
f1(i1,j1-1)f1(i1+1,j1)f1(i1+1,j1+1)f1(i1+1,j1+2)
f1(i1+2,j1-1)f1(i1+2,j1)f1(i1+2,j1+1)f1(i1+2,j1+2)];
g1(i,j)=(A*B*C);
end
end
g=uint8(g1);%将矩阵转换成8位无符号整数
imshow(g);
title('自编双三次插值法放大8倍图像');
其中子函数sw代码如下:
function A=sw(w1)
w=abs(w1);
if w<1&&w>=0
A=1-2*w^2+w^3;
elseif w>=1&&w<2
A=4-8*w+5*w^2-w^3;
else
A=0;
end
与MATLAB自带函数相比,以上手工编写的MATLAB代码只能完成黑白图像输出,且运行时间远比MATLAB自带函数的运行时间长。

手工编写双三次插值算法MATLAB代码的运行结果如图6所示:
图6
2,其他算法简介:
传统的图像放大方法有重复放大线性放大和高次多项式插值放大。

重复放大最简单,但会产生明显的方块效应线性放大消除了方块效应,但会造成图像的模糊高次多项式插值放大效果较好,但运算复杂。

由于传统方法的固有缺陷,诞生了新一代图像放大方法,主要有小波放大、邻域交换内插和分形放大等。

下面简单介绍一下增强系数小波放大算法:
算法示意图如图7所示:
图7
通过二维离散小波变换,经分析高通滤波器和分析低通滤波器,可将一幅分辨率为p的二维图像分解为分辨率为p/2的离散逼近信号A1和水平、垂直、对角三个细节信号H1、V1、D1。

这四个分量都只有原图像大小的1/4。

之后又可以对A1进行同样的分解如图7所示。

这个过程可以一直重复下去。

通过二维离散小波反变换,用相应的综合高通滤波器和综合低通滤波器可将各分量重构为原图像。

对于一个图像,低频成分包含了基本特征,即原图像的近似,高频成分反应其细节。

基于此,我们将原图像作为低频成分A1,其他3个细节部分置0,进行小波重构,便可得到放大4倍的图像。

但是由于能量守恒,放大后的图像能量分散会显得较暗。

可以将原图像灰度值矩阵乘2,再进行上述变换,便可解决这一问题。

小波分解重构是一种全局运算,不会造成重复放大中的方块效应,同时较好地保持图像边缘的清晰。

相关文档
最新文档