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

合集下载

Matlab中的图像增强技术与应用

Matlab中的图像增强技术与应用

Matlab中的图像增强技术与应用图像增强技术是数字图像处理领域中的重要方向之一。

通过增强图像的亮度、对比度、锐度以及去除噪声、伪彩色等方法,可以使图像更加清晰、具有更好的可视化效果。

Matlab作为一种常用的图像处理工具,提供了丰富的图像增强函数和工具箱,可以帮助我们实现各种图像增强技术的应用。

本文将介绍一些常用的图像增强技术,并结合Matlab来演示它们的应用。

一、灰度变换与直方图均衡化灰度变换是最基础的图像增强技术之一,它通过调整图像中像素的灰度值来改变图像的亮度和对比度。

在Matlab中,我们可以使用imadjust函数来实现灰度变换。

imadjust函数可以根据输入的灰度范围,将图像像素的灰度值进行线性映射,从而改变图像的亮度。

直方图均衡化是一种改善图像对比度的方法,它通过对图像中像素的灰度分布进行调整,使得图像中的灰度级尽可能均匀分布。

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

该函数会自动计算图像的累积直方图,并将其映射为均匀分布的灰度级。

二、滤波器与空域增强滤波器是一种常见的图像增强工具,它可以通过删去或者增强图像中的某些频率成分,从而实现图像的去噪和锐化。

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

常见的滤波器包括均值滤波器、中值滤波器以及高斯滤波器等。

均值滤波器可以平滑图像,减少图像中的噪声;中值滤波器可以有效抑制椒盐噪声等随机噪声;高斯滤波器可以平滑图像并增强图像的边缘。

除了滤波器,空域增强也是一种常用的图像增强技术。

通过对图像进行锐化、增强边缘等操作,可以使图像更加清晰和鲜明。

在Matlab中,我们可以使用imsharpen函数来实现图像的锐化操作。

该函数可以增强图像的高频信息,使得图像的细节更加突出。

三、变换域增强变换域增强是一种通过将图像从空域转换到频域,进行增强操作的方法。

其中最常用的变换是傅里叶变换和小波变换。

在Matlab中,我们可以使用fft2函数和dwt2函数来实现傅里叶变换和小波变换。

Matlab中的图像增强方法

Matlab中的图像增强方法

Matlab中的图像增强方法图像增强是数字图像处理中的一项重要技术,通过使用各种算法和方法,可以改善图像的质量、增加图像的信息量和清晰度。

在Matlab中,有许多强大而灵活的工具和函数,可以帮助我们实现图像增强的目标。

本文将介绍几种常用的Matlab图像增强方法,并探讨它们的原理和应用。

一、直方图均衡化直方图均衡化是一种常用的图像增强方法,通过调整图像的像素分布来增强图像的对比度和亮度。

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

该函数会根据图像的直方图信息,将像素的灰度值重新映射到一个均匀分布的直方图上。

直方图均衡化的原理是基于图像的累积分布函数(CDF)的变换。

它首先计算图像的灰度直方图,并根据直方图信息计算CDF。

然后,通过将CDF线性映射到期望的均匀分布上,将图像的像素值进行调整。

直方图均衡化的优点在于简单易实现,且效果较好。

但它也存在一些限制,比如对噪声敏感、全局亮度调整可能导致细节丢失等。

因此,在具体应用中,我们需要权衡其优缺点,并根据图像的特点选择合适的方法。

二、自适应直方图均衡化自适应直方图均衡化是对传统直方图均衡化的改进,它能够在改善对比度的同时,保持局部细节。

与全局直方图均衡化不同,自适应直方图均衡化采用局部的直方图信息来进行均衡化。

在Matlab中,我们可以使用“adapthisteq”函数来实现自适应直方图均衡化。

该函数会将图像分成小块,并在每个块上进行直方图均衡化。

通过这种方式,自适应直方图均衡化可以在增强图像对比度的同时,保留图像的细节。

自适应直方图均衡化的优点在于针对每个小块进行处理,能够更精确地调整局部对比度,避免了全局调整可能带来的细节丢失。

然而,相对于全局直方图均衡化,自适应直方图均衡化的计算量较大,因此在实时处理中可能会引起性能问题。

三、模糊与锐化图像增强不仅局限于对比度和亮度的调整,还可以改善图像的清晰度和边缘信息。

在Matlab中,我们可以使用一些滤波器来实现图像的模糊和锐化。

实验二 图像增强 matlab程序和结果分析

实验二  图像增强  matlab程序和结果分析

实验二图像增强李影通信092 092302一实验目的1.掌握图像灰度变换的基本原理。

2.掌握图像灰度级修正方法,即直方图均衡化法。

3.图像平滑的主要目的是减少噪声。

噪声有很多种类,不同的噪声有不同的抑制措施。

要求掌握常用的图像平滑的空间域方法和频率域方法。

4.锐化处理技术的主要目的用于加强图像的目标边界和图像细节,要求掌握常用的图像锐化的空间域方法和频率域方法。

二实验原理三 实验内容(一)图像灰度变换1.灰度线性变换—图像反转%图像反转线性变换I=imread('sailboat.bmp') %读原始图像%将图像矩阵转化为double 类型J=double(I);J=-J+(256-1); %图像反转线性变化%double 数据类型转化为unit8类型H=uint8(J);subplot(1,2,1),imshow(I);%显示灰度原始图像subplot(1,2,2),imshow(H);%显示灰度反转后图像2.灰度非线性变—对数变换%灰度非线性变换:对数变换I=imread('saturn.bmp'); %读原始图像J=double(I); %将图像矩阵转化为double 类型J=40*(log(J+1));%图像进行对数变换H=uint8(J);%double 数据类型转化为unit8类型subplot(2,1,1),imshow(I); %显示对数变换前的图像subplot(2,1,2),imshow(H); %显示对数变换前的图像3.灰度图像与对应直方图的显示%灰度图像与对应直方图的显示clear;close all;I=imread('elain.bmp'); %读原始图像figure,imshow(I,256); %显示灰度图像xlabel('f'),ylabel('g');figure,imhist(I,64); %显示直方图图像fg 0501001502002504.直方图均衡化%直方图均衡化前后的图像灰度分布I=imread('peppers.bmp') %读入原图像到I 变量J=histeq(I); %对图像I 直方图均衡化subplot(2,2,1),imshow(I); %显示原图像subplot(2,2,2),imshow(J); %显示处理后的图像subplot(2,2,3),imhist(I,64);%显示原图像的直方图灰度分布(二)图像平滑1.空间域(1)邻域平均法采用不同模板%5*5邻域平均图像平滑I=imread('elain.bmp'); %读原始图像J=imnoise(I,'salt & pepper',0.02);%加入均值为0,方差为0.02的噪声J1=filter2(fspecial('average',3),I)/255;%用3*3模板均值滤波J2=filter2(fspecial('average',5),I)/255;%用5*5模板均值滤波J3=filter2(fspecial('average',7),I)/255;%用7*7模板均值滤波imshow(I); %显示原图像figure,imshow(J);%显示加入噪声的图像figure,imshow(J1);%显示用3*3模板均值滤波后图像figure,imshow(J2);%显示用5*5模板均值滤波后图像figure,imshow(J3);%显示用7*7模板均值滤波后图像0100200001002000(2)在不同噪声下用中值滤波法%中值滤波处理I=imread('elain.bmp'); %读原始图像%加均值为0,方差为0.02的椒盐噪声J1=imnoise(I,'salt & pepper',0.02);%加均值为0,方差为0.02的高斯噪声J2=imnoise(I,'gaussian',0.02);%显示有椒盐噪声图像subplot(2,2,1),imshow(J1);;%显示有高斯噪声图像subplot(2,2,2),imshow(J2)%对有椒盐噪声图像进行5*5方形窗口中值滤波I1=medfilt2(J1,[5 5]);%对有高斯噪声图像进行5*5方形窗口中值滤波I2=medfilt2(J2,[5 5]);%显示有椒盐噪声图像的滤波结果subplot(2,2,3),imshow(I1);%显示有高斯噪声图像的滤波结果subplot(2,2,4),imshow(I2);(3)均值滤波法与中值滤波法对比%分别用均值滤波和中值滤波对图像平滑I=imread('elain.bmp');I1=imnoise(I,'salt & pepper',0.06);%加入椒盐噪声I2=double(I1)/255;%邻域运算h1=[1/9 1/9 1/9;1/9 1/9 1/9;1/9 1/9 1/9];%进行二维卷积操作实现均值滤波J1=conv2(I2,h1,'same');%进行二维3*3中值滤波J2=medfilt2(I2,[3 3]);subplot(2,2,1),imshow(I);subplot(2,2,2),imshow(I1);subplot(2,2,3),imshow(J1);subplot(2,2,4),imshow(J2);2.频率域%各种频域低通滤波器的MATLAB实现clc;[I,map]=imread('elain.bmp');%从图形文件中读取图像noisy=imnoise(I,'gaussian',0.01);%对原图象添加高斯噪声imshow(noisy,map);%显示加入高斯噪声后的图像[M,N]=size(I);F=fft2(noisy);%进行二维快速傅里叶变换fftshift(F);%把快速傅里叶变换的DC组件移到光谱中心Dcut=100;D0=150;D1=250;for u=1:Mfor v=1:ND(u,v)=sqrt(u^2+v^2);%巴特沃斯低通滤波器传递函数BUTTERH(u,v)=1/(1+(sqrt(2)-1)*(D(u,v)/Dcut)^2);%指数型低通滤波器传递函数EXPOTH(u,v)=exp(log(1/sqrt(2))*(D(u,v)/Dcut)^2);if D(u,v)<D0 %梯度低通滤波器传递函数TRAPEH(u,v)=1;elseif D(u,v)<=D1TRAPEH(u,v)=(D(u,v)-D1)/(D0-D1);elseTRAPEH(u,v)=0;endendendBUTTERG=BUTTERH.*F;BUTTERfiltered=ifft2(BUTTERG);EXPOTG=EXPOTH.*F;EXPOTGfiltered=ifft2(EXPOTG);TRAPEG=TRAPEH.*F;TRAPEfiltered=ifft2(TRAPEG);subplot(2,2,1),imshow(noisy) %显示加入高斯噪声后的图像subplot(2,2,2),imshow(BUTTERfiltered,map)%显示巴特沃斯低通滤波后的图像subplot(2,2,3),imshow(EXPOTGfiltered,map)%显示指数型低通滤波后的图像subplot(2,2,4),imshow(TRAPEfiltered,map)%显示梯形低通滤波后的图像(三)图象锐化1.空间域(1)高通滤波法%MATLAB空域高通滤波法程序I=imread('elain.bmp');J=im2double(I); %转换图像矩阵为双精度subplot(2,2,1),imshow(J,[]) %显示原图像h1=[0 -1 0, -1 5 -1,0 -1 0];h2=[-1 -1 -1, -1 9 -1,-1 -1 -1];h3=[1 -2 1, -2 5 -2, 1 -2 1];A=conv2(J,h1,'same'); %进行二维卷积操作subplot(2,2,2),imshow(A,[])B=conv2(J,h2,'same');subplot(2,2,3),imshow(B,[])C=conv2(J,h3,'same');subplot(2,2,4),imshow(C,[])(2)梯度法图象锐化[I,map]=imread('Boat.bmp');%读入原图像Subplot(2,3,1),imshow(I,map);%显示原始图像I=double(I);[IX,IY]=gradient(I);GM=sqrt(IX.*IX+IY.*IY);%计算梯度的幅度OUT1=GM;%显示第1种梯度的图像锐化 Subplot(2,3,2),imshow(OUT1,map);OUT2=I; J=find(GM>=10);%阈值T=10 OUT2(J)=GM(J); %显示第2种梯度的图像锐化 Subplot(2,3,3),imshow(OUT2,map);OUT3=I; J=find(GM>=10); OUT3(J)=255; %显示第3种梯度的图像锐化Subplot(2,3,4),imshow(OUT3,map);OUT4=I;J=find(GM<=10);OUT4(J)=255;%显示第4种梯度的图像锐化Subplot(2,3,5),imshow(OUT4,map);OUT5=I;J=find(GM>=10);OUT5(J)=255;Q=find(GM<10);OUTS(Q)=0;%显示第5种梯度的图像锐化Subplot(2,3,6),imshow(OUT5,map);(3)用Sobel 算子对图像滤波%利用Sobel 算子对图像滤波I=imread('elain.bmp');%读入图像文件H=fspecial('sobel');%选择Sobel 算子subplot(1,2,1),imshow(I)%显示原图像J=filter2(H,I);%卷积运算subplot(1,2,2),imshow(J)%显示Sobel 算子对图像锐化的结果(4)利用拉普拉斯算子对模糊图像进行增强%用拉普拉斯算子对模糊图像进行增强I=imread('barbara.bmp');I=double(I);subplot(1,2,1),imshow(I,[])h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯算子J=conv2(I,h,'same'); %用拉普拉斯算子对图像进行二维卷积运算K=I-J; %增强的图像为原始图像减去拉普拉斯算子滤波的图像subplot(1,2,2),imshow(K,[])2.频率域图象锐化%频域高通滤波法对图像进行增强clc;[I,map]=imread('elain.bmp');noisy=imnoise(I,'gaussian',0.01);[M N]=size(I);F=fft2(noisy);fftshift(F);Dcut=100;D0=250;D1=150;for u=1:Mfor v=1:ND(u,v)=sqrt(u^2+v^2);BUTTERH(u,v)=1/(1+(sqrt(2)-1)*(Dcut/D(u,v))^2); %巴特沃斯低通滤波器传递函数EXPOTH(u,v)=exp(log(1/sqrt(2))*(Dcut/D(u,v))^2); %指数型低通滤波器传递函数if D(u,v)<D1 %梯度低通滤波器传递函数THPFH(u,v)=0;elseif D(u,v)<=D0THPFH(u,v)=(D(u,v)-D1)/(D0-D1);elseTHPFH(u,v)=1;endendendBUTTERG=BUTTERH.*F;BUTTERfiltered=ifft2(BUTTERG);EXPOTG=EXPOTH.*F;EXPOTGfiltered=ifft2(EXPOTG);THPFG=THPFH.*F;THPFfiltered=ifft2(THPFG);subplot(2,2,1),imshow(noisy)subplot(2,2,2),imshow(BUTTERfiltered) subplot(2,2,3),imshow(EXPOTGfiltered) subplot(2,2,4),imshow(THPFfiltered);四思考题1.均值滤波和中值滤波有那些优缺点?2.窗口尺寸对平滑滤波结果有什么影响?3.常用的锐化滤波算子都有哪些?。

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('乘性噪声中值滤波图像');。

数字图像处理中图像增强的四种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练习程序(图像放⼤缩⼩,双⽴⽅插值) 我主要参考了,不过他推导的系数我感觉有问题,⽤他的公式直接套⽤放⼤的图像会有⽹格,也许是我理解的有偏差。

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

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

程序代码: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效果图:原图双⽴⽅插值效果双线性插值效果区别不⼤,不过认真看双⽴⽅还是效果好些。

  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==0 x = 1; end
if y==0 y = 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,再进行上述变换,便可解决这一问题。

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

相关文档
最新文档