当前位置:文档之家› 线性插值算法实现图像缩放详解

线性插值算法实现图像缩放详解

线性插值算法实现图像缩放详解
线性插值算法实现图像缩放详解

线性插值算法实现图像缩放详解

在Windows中做过图像方面程序的人应该都知道Windows的GDI有?个API函数:StretchBlt,对应在VCL中是 TCanvas类的StretchDraw方法。它可以很简单地实现图像的缩放操作。但问题是它是用了速度最快,最简单但效果也是最差的“最近邻域法”,虽然在大多数情况下,它也够用了,但对于要求较高的情况就不行了。

不久前做了?个小玩意儿,用于管理我用DC拍的?堆照片,其中有?个插件提供了缩放功能,目前的版本就是用了StretchDraw,有时效果不能令人满意,我?直想加入两个更好的:线性插值法和三次样条法。经过研究发现三次样条法的计算量实在太大,不太实用,所以决定就只做线性插值法的版本了。

从数字图像处理的基本理论,我们可以知道:图像的变形变换就是源图像到目标图像的坐标变换。简单的想法就是把源图像的每个点坐标通过变形运算转为目标图像的相应点的新坐标,但是这样会导致?个问题就是目标点的坐标通常不会是整数,而且像放大操作会导致目标图像中没有被源图像的点映射到,这是所谓 “向前映射”方法的缺点。所以?般都是采用“逆向映射”法。

但是逆向映射法同样会出现映射到源图像坐标时不是整数的问题。这里就需要“重采样滤波器”。这个术语看起来很专业,其实不过是因为它借用了电子信号处理中的惯用说法(在大多数情

况下,它的功能类似于电子信号处理中的带通滤波器),理解起来也不复杂,就是如何确定这个非整数坐标处的点应该是什么颜色的问题。前面说到的三种方法:最近邻域法,线性插值法和三次样条法都是所谓的“重采样滤波器”。

所谓“最近邻域法”就是把这个非整数坐标作?个四舍五入,取最近的整数点坐标处的点的颜色。而“线性插值法”就是根据周围最接近的几个点(对于平面图像来说,共有四点)的颜色作线性插值计算(对于平面图像来说就是二维线性插值)来估计这点的颜色,在大多数情况下,它的准确度要高于最近邻域法,当然效果也要好得多,最明显的就是在放大时,图像边缘的锯齿比最近邻域法小非常多。当然它同时还带业个问题:就是图像会显得比较柔和。这个滤波器用专业术语来说(呵呵,卖弄?下偶的专业^_^)叫做:带阻性能好,但有带通损失,通带曲线的矩形系数不高。至于三次样条法我就不说了,复杂了?点,可自行参考数字图像处理方面的专业书籍,如本文的参考文献。

再来讨论?下坐标变换的算法。简单的空间变换可以用?个变换矩阵来表示:

[x’,y’,w’]=[u,v,w]*T

其中:x’,y’为目标图像坐标,u,v为源图像坐标,w,w’称为齐次坐标,通常设为1,T为?个3X3的变换矩阵。

这种表示方法虽然很数学化,但是用这种形式可以很方便地表示多种不同的变换,如平移,旋转,缩放等。对于缩放来说,相当于:

[Su 0 0 ]

[x, y, 1] = [u, v, 1] * | 0 Sv 0 |

[0 0 1 ]

其中Su,Sv分别是X轴方向和Y轴方向上的缩放率,大于1时放大,大于0小于1时缩小,小于0时

反转。

矩阵是不是看上去比较晕?其实把上式按矩阵乘法展开就是:

{ x = u * Su

{ y = v * Sv

就这么简单。^_^

有了上面三个方面的准备,就可以开始编写代码实现了。思路很简单:首先用两重循环遍历目标图像的每个点坐标,通过上面的变换式(注意:因为是用逆向映射,相应的变换式应该是:u = x / Su 和v = y / Sv)取得源坐标。因为源坐标不是整数坐标,需要进行二维线性插值运算:

P = n*b*PA + n * ( 1 – b )*PB + ( 1 – n ) * b * PC + ( 1 – n ) * ( 1 – b ) * PD

其中:n为v(映射后相应点在源图像中的Y轴坐标,?般不是整数)下面最接近的行的Y轴坐标与v的差;同样b也类似,不过它是X轴坐标。PA- PD分别是(u,v)点周围最接近的四个(左上,右上,左下,右下)源图像点的颜色(用TCanvas的Pixels属性)。P为(u,v)点的插值颜色,

即(x,y)点的近似颜色。

这段代码我就不写了,因为它的效率实在太低:要对目标图像的每?个点的RGB进行上面那?串复杂的浮点运算。所以?定要进行优化。对于VCL应用来说,有个比较简单的优化方法就是用TBitmap的ScanLine属性,按行进行处理,可以避免Pixels的像素级操作,对性能可以有很大的改善。这已经是算是用VCL进行图像处理的基本优化常识了。不过这个方法并不总是管用的,比如作图像旋转的时候,这时需要更多的技巧。

无论如何,浮点运算的开销都是比整数大很多的,这个也是?定要优化掉的。从上面可以

看出,浮点数是在变换时引入的,而变换参数Su,Sv通常就是浮点数,所以就从它下手优化。?般来说,Su,Sv可以表示成分数的形式:

Su = ( double )Dw / Sw; Sv = ( double )Dh / Sh

其中Dw, Dh为目标图像的宽度和高度,Sw, Sh为源图像的宽度和高度(因为都是整数,为求得浮点结果,需要进行类型转换)。

将新的Su, Sv代入前面的变换公式和插值公式,可以导出新的插值公式:

因为:

b = 1 – x * Sw % Dw / ( double )Dw; n = 1 – y * Sh % Dh / ( double )Dh

设:

B = Dw – x * Sw % Dw; N = Dh – y * Sh % Dh

则:

b = B / ( double )Dw; n = N / ( double )Dh

用整数的B,N代替浮点的b, n,转换插值公式:

P = ( B * N * ( PA – PB – PC + PD ) + Dw * N * PB + DH * B * PC + ( Dw * Dh – Dh * B – Dw * N ) * PD ) / ( double )( Dw * Dh )

这里最终结果P是浮点数,对其四舍五入即可得到结果。为完全消除浮点数,可以用这样的方法进行四舍五入:

P = ( B * N … * PD + Dw * Dh / 2 ) / ( Dw * Dh )

这样,P就直接是四舍五入后的整数值,全部的计算都是整数运算了。

简单优化后的代码如下:

int __fastcall TResizeDlg::Stretch_Linear(Graphics::TBitmap * aDest, Graphics::TBitmap * aSrc) {

int sw = aSrc->Width - 1, sh = aSrc->Height - 1, dw = aDest->Width - 1, dh = aDest->Height - 1; int B, N, x, y;

int nPixelSize = GetPixelSize( aDest->PixelFormat );

BYTE * pLinePrev, *pLineNext;

BYTE * pDest;

BYTE * pA, *pB, *pC, *pD;

for ( int i = 0; i <= dh; ++i )

{

pDest = ( BYTE * )aDest->ScanLine[i];

y = i * sh / dh;

N = dh - i * sh % dh;

pLinePrev = ( BYTE * )aSrc->ScanLine[y++];

pLineNext = ( N == dh ) ? pLinePrev : ( BYTE * )aSrc->ScanLine[y];

for ( int j = 0; j <= dw; ++j )

{

x = j * sw / dw * nPixelSize;

B = dw - j * sw % dw;

pA = pLinePrev + x;

pB = pA + nPixelSize;

pC = pLineNext + x;

pD = pC + nPixelSize;

if ( B == dw )

{

pB = pA;

pD = pC;

}

for ( int k = 0; k < nPixelSize; ++k )

*pDest++ = ( BYTE )( int )(

( B * N * ( *pA++ - *pB - *pC + *pD ) + dw * N * *pB++

+ dh * B * *pC++ + ( dw * dh - dh * B - dw * N ) * *pD++

+ dw * dh / 2 ) / ( dw * dh )

);

}

}

return 0;

}

应该说还是比较简洁的。因为宽度高度都是从0开始算,所以要减?,GetPixelSize是根

据PixelFormat属性来判断每个像素有多少字节,此代码只支持24或32位色的情况(对于15或16位色需要按位拆开—因为不拆开的话会在计算中出现不期望的进位或借位,导致图像颜色混乱—处理较麻烦;对于8位及8位以下索引色需要查调色板,并且需要重索引,也很麻烦,所以都不

支持;但8位灰度图像可以支持)。另外代码中加入?些在图像边缘时防止访问越界的代码。

通过比较,在PIII-733的机器上,目标图像小于1024x768的情况下,基本感觉不出速度

比StretchDraw有明显的慢(用浮点时感觉比较明显)。效果也相当令人满意,不论是缩小还是放大,图像质量比StretchDraw方法有明显提高。

不过由于采用了整数运算,有?个问题必须加以重视,那就是溢出的问题:由于式中的分母是dw * dh,而结果应该是?个Byte即8位二进制数,有符号整数最大可表示31位二进制数,所

以dw * dh的值不能超过23位二进制数,即按2:1的宽高比计算目标图像分辨率不能超过4096*2048。当然这个也是可以通过用无符号数(可以增加?位)及降低计算精度等方法来实现扩展的,有兴趣的朋友可以自己试试。

当然这段代码还远没有优化到极致,而且还有很多问题没有深入研究,比如抗混叠(anti-aliasing)等,有兴趣的朋友可以自行参考相关书籍研究。(转自:迪派影像)

线性插值算法实现图像缩放详解

线性插值算法实现图像缩放详解 在Windows中做过图像方面程序的人应该都知道Windows的GDI有?个API函数:StretchBlt,对应在VCL中是 TCanvas类的StretchDraw方法。它可以很简单地实现图像的缩放操作。但问题是它是用了速度最快,最简单但效果也是最差的“最近邻域法”,虽然在大多数情况下,它也够用了,但对于要求较高的情况就不行了。 不久前做了?个小玩意儿,用于管理我用DC拍的?堆照片,其中有?个插件提供了缩放功能,目前的版本就是用了StretchDraw,有时效果不能令人满意,我?直想加入两个更好的:线性插值法和三次样条法。经过研究发现三次样条法的计算量实在太大,不太实用,所以决定就只做线性插值法的版本了。 从数字图像处理的基本理论,我们可以知道:图像的变形变换就是源图像到目标图像的坐标变换。简单的想法就是把源图像的每个点坐标通过变形运算转为目标图像的相应点的新坐标,但是这样会导致?个问题就是目标点的坐标通常不会是整数,而且像放大操作会导致目标图像中没有被源图像的点映射到,这是所谓 “向前映射”方法的缺点。所以?般都是采用“逆向映射”法。 但是逆向映射法同样会出现映射到源图像坐标时不是整数的问题。这里就需要“重采样滤波器”。这个术语看起来很专业,其实不过是因为它借用了电子信号处理中的惯用说法(在大多数情 况下,它的功能类似于电子信号处理中的带通滤波器),理解起来也不复杂,就是如何确定这个非整数坐标处的点应该是什么颜色的问题。前面说到的三种方法:最近邻域法,线性插值法和三次样条法都是所谓的“重采样滤波器”。 所谓“最近邻域法”就是把这个非整数坐标作?个四舍五入,取最近的整数点坐标处的点的颜色。而“线性插值法”就是根据周围最接近的几个点(对于平面图像来说,共有四点)的颜色作线性插值计算(对于平面图像来说就是二维线性插值)来估计这点的颜色,在大多数情况下,它的准确度要高于最近邻域法,当然效果也要好得多,最明显的就是在放大时,图像边缘的锯齿比最近邻域法小非常多。当然它同时还带业个问题:就是图像会显得比较柔和。这个滤波器用专业术语来说(呵呵,卖弄?下偶的专业^_^)叫做:带阻性能好,但有带通损失,通带曲线的矩形系数不高。至于三次样条法我就不说了,复杂了?点,可自行参考数字图像处理方面的专业书籍,如本文的参考文献。 再来讨论?下坐标变换的算法。简单的空间变换可以用?个变换矩阵来表示: [x’,y’,w’]=[u,v,w]*T 其中:x’,y’为目标图像坐标,u,v为源图像坐标,w,w’称为齐次坐标,通常设为1,T为?个3X3的变换矩阵。 这种表示方法虽然很数学化,但是用这种形式可以很方便地表示多种不同的变换,如平移,旋转,缩放等。对于缩放来说,相当于: [Su 0 0 ] [x, y, 1] = [u, v, 1] * | 0 Sv 0 | [0 0 1 ] 其中Su,Sv分别是X轴方向和Y轴方向上的缩放率,大于1时放大,大于0小于1时缩小,小于0时 反转。 矩阵是不是看上去比较晕?其实把上式按矩阵乘法展开就是: { x = u * Su

插值法在图像处理中的运用要点

插值方法在图像处理中的应用 作者: 专业姓名学号 控制工程陈龙斌 控制工程陈少峰 控制工程殷文龙 摘要 本文介绍了插值方法在图像处理中的应用。介绍了典型的最近邻插值、双线性插值、双三次插值、双信道插值、分形插值的原理。以分形插值为重点,在图像放大领域用MATLAB进行仿真,并与其它方法的结果做了比对。指出了各种方法的利弊,期待更进一步的研究拓展新的算法以及改进现有算法。

一、引言 人类通过感觉器官从客观世界获取信息,而其中一半以上的信息都是通过视觉获得的。图像作为人类视觉信息传递的主要媒介,具有声音、语言、文字等形式无法比拟的优势,给人以具体、直观的物体形象。在数字化信息时代,图像处理已经成为重要的数据处理类型。数字图像比之传统的模拟图像处理有着不可比拟的优势。一般采用计算机处理或者硬件处理,处理的内容丰富,精度高,变通能力强,可进行非线性处理。但是处理速度就会有所不足。图像处理的主要内容有:几何处理、算术处理、图像增强、图像复原、图像重建、图像编码、图像识别、图像理解等。以上这些图像处理大体上可分为图像的像质改善、图像分析和图像重建三大部分。 日常生活中,越来越多的领域需要高分辨率图像,采用图像插值技术来提高数字图像的分辨率和清晰度,从软件方面进行改进就具有十分重要的实用价值。多媒体通信在现代网络传输中扮演重要角色,因此插值放大提高图像分辨率是一个非常重要的问题。此外,图像变换被广泛用于遥感图像的几何校正、医学成像以及电影、电视和媒体广告等影像特技处理中。在进行图像的一些几何变换时,通常都会出现输出像素坐标和输入栅格不重合的现象,也必须要用到图像插值。图像插值是图像处理中图像重采样过程中的重要组成部分,而重采样过程广泛应用于改善图像质量、进行有损压缩等,因而研究图像插值具有十分重要的理论意义和实用价值。 图像插值是一个数据再生过程。由原始图像数据再生出具有更高分辨率的图像数据。分为图像内插值和图像间插值。前者指将一幅较低分辨率的图像再生出一幅较高分辨率的图像。后者指在若干幅图像之间再生出几幅新的图像。插值过程就是确定某个函数在两个采样点之间的数值时采用的运算过程.通常是利用曲线拟合的方法进行插值算法,通过离散的输入采样点建立一个连续函数,用这个重建的函数求出任意位置处的函数值,这个过程可看作是采样的逆过程。 20世纪40年代末,香农提出了信息论,根据采样定理,若对采样值用sinc函数进行插值,则可准确地恢复原函数,于是sinc函数被接受为插值函数,也称为理想插值函数。理想插值函数有两个缺点: (1)它虽然对带限信号可以进行无错插值,但实际中带限信号只是一小部分信号。 (2)sinc函数的支撑是无限的,而没有函数既是带限的,又是紧支撑的。 为了解决这个问题,经典的办法是刚窗函数截断sinc函数,这个窗函数必须在0剑l 之间为正数,在l到2之间为负数。sinc函数对应的是无限冲激响应,不适于有限冲激相应来进行局部插值。对数字图像来说,对图像进行插值也称为图像的重采样。它分为两个步骤:将离散图像插值为连续图像以及对插值结果图像进行采样。 经典的图像插值算法是利用邻近像素点灰度值的加权平均值来计算未知像素点处的灰度值,而这种加权平均一般表现表现为信号的离散采样值与插值基函数之间的二维卷积。这种基于模型的加权平均的图像插值方法统称为线性方法。经典的插值方法有:最近邻域法,双线性插值,双三次B样条插值,双三次样条插值,sinc函数等。线性方法,它们一个共同点就是,所有这些基函数均是低通滤波器,对数据中的高频信息都具有滤除和抑制效应,因

图像增强算法综述

图像增强算法研究综述 刘璐璐 宁波工程学院电子与信息工程学院计算机科学与技术071班,邮编:(315100) E-mail:375212239@https://www.doczj.com/doc/0f5402849.html, 摘要:本文简要介绍图像增强的概念和图像增强算法的分类,从图像的直方图均衡化处理方法,直方图规定化处理方法和图像平滑处理方法三方面对图像增强算法进行讨论和研究,并说明了图像增强技术的应用和前景展望。 关键词:图像增强直方图均衡化直方图规定化平滑处理 近年来,随着电子计算机技术的进步,计算机图像处理得到了飞跃的发展,己经成功的应用于几乎所有与成像有关的领域,并正发挥着相当重要的作用。它利用计算机对数字图像进行系列操作,从而获得某种预期的结果。对图像进行处理时,经常运用图像增强技术以改善图像的质量增强对某种信息的辨识能力,以更好的应用于现代各种科技领域,图像增强技术的快速发展同它的广泛应用是分不开的,发展的动力来自稳定涌现的新的应用,我们可以预料,在未来社会中图像增强技术将会发挥更为重要的作用。在图像处理过程中,图像增强是十分重要的一个环节。 1.图像增强概念及现实应用 1.1 图像增强技术 图像增强是数字图像处理的基本内容之一。图像增强是指按特定的需要突出一幅图像中的某些信息,同时,削弱或去除某些不需要的信息。这类处理是为了某种应用目的去改善图像质量,处理的结果更适合于人的视觉特性或机器识别系统,图像增强处理并不能增加原始图像的信息,而只能增强对某种信息的辨识能力,使处理后的图像对某些特定的应用比原来的图像更加有效。 1.2图像增强技术的现实应用 目前,图像增强处理技术的应用己经渗透到医学诊断、航空航天、军事侦察、纹识别、无损探伤、卫星图片的处理等领域,在国民经济中发挥越来越大的作用。其中最典型的应用主要体现以下方面。 1

任意比例视频图像放大算法的研究与实现

任意比例视频图像放大算法的研究与实现 摘要:随着多媒体信息技术的发展,针对视频信号的处理技术应运而生。其中实时缩放正是视频信号处理技术的关键。对于图像缩放,所用数学模型的优劣会直接影响用户观看图像的质量。在视频处理中,图像的缩放算法不仅影响视频质量,而且算法的处理速度也会影响视频流的显示,从而影响用户观看的连续性。本文针对视频信号对处理速度和精度的要求,采用只对亮度信号进行复杂处理的方法。分析图像边缘区域的特性,并通过数学推导,在边缘区域的插值中设计四个模板,从而设计改进的视频缩放算法。实验结果表明,本设计的视频信号缩放算法在主观视觉上保持了图像纹理细节和边缘信息。客观评价中,本算法处理得到的图像高频分量丢失少,且保证较好的低频分量处理效果;平均峰值信噪比较双线性插值提高0.24dB。 关键词:视频信号;图像处理;缩放;边缘 ABRSTRACT:With the rapid development of multimedia information technology,video signal's processing technology emerges at that time. Video’s real-time scaling is the key issue in video signal's processing technology. For image scaling,the mathematical model affects the picture’s visual quality. In video processing,not only the scaling algorithm influences the video’s quality,but also the alg orithm’s performance affects the display of the video so that influences the video playing smoothly.Due to the speed and precision demanded in video signal’s processing,only employ the proposed algorithm in Y channel signal. Under the analysis on the characteristic of the edge in image,four scaling masks are deduced mathematically. This paper issues a lot of experiments on the infrastructure of the theoretical study,which show that the video signal's scaling algorithm designed in this paper has obtained the better effectiveness than traditional algorithms. Our design keeps texture details in subjective vision,raises the PSNR 0.24dB on average,and it has well performance in both high and low frequency component in spectrum at the same. This is satisfied with the designated target of the project. Key words: video signals; image processing; scaling; edge 1 绪论 1.1 研究背景及意义 信息技术和互联网发展到今天,多媒体信息技术的应用范围日趋广泛,多媒体信息包括音频数据、图像和视频数据及文字数据。而人类获取的各种信息中,图像信息占有绝大部分,图像带给人们直观并具体的事物形象,这是声音、语言和文字不能比拟的。 人眼看到的是连续变化的景物,是模拟图像,而在数字设备中存储和显示的图像是经过采样和量化的数字图像。为满足人类视觉和实现信息传输的需求,针对图像和视频信息的实时缩放技术在生活中起着不可忽略的作用[1]。 视频图像的后期缩放处理势必将会作为显示呈现在终端之前的一个重要环节。无论其输入视频信源的分辨率大小尺寸多少,最终都应该以用户的实际物理显示设备的最佳观看分辨率作为显示输出结果,通常由于带宽有限的关系,该显示过程通常以放大为主,即输入视频图像分辨率小于输出分辨率。为了满足不同终端用户对图像尺寸的需求,改变图像尺寸的缩放技术应运而生。 图像缩放是数字图像处理中非常重要的技术之一。对于网络传输的图像,由于客观条件的种种限制,想要快速地传输高分辨率的图像一般难以达到,同时由于硬件性能的限制,图片往往也无法满足所需要的分辨率,而硬件的改进却需要复杂的技术并付出昂贵的代价,所以如果能够从软件技术方面进行改进,采用图像插值技术提高图像质量来达到所期望的分辨率和清晰度,其具有的实用意义将是十分重大的。因此,利用插值的方法将低分辨率图像插值放大成高分辨率图像就成为人们追求的目标。 用图像缩放算法进行处理时,存在一对相悖的要素:图像处理速度和图像精度。一般情况下,要想获得比较高的速度甚至达到实时的图像输出速率,只能采用相对来说运算量比较简单的缩放算法;而如果要想获得处理效果比较好的图像,就只能考虑牺牲处理速度,采用计算量大、比较复杂的缩放算法。图像缩

MATLAB三次样条插值之三弯矩法

MATLAB三次样条插值之三弯矩法 首先说这个程序并不完善,为了实现通用(1,2,…,n)格式解题,以及为调用追赶法程序,没有针对节点数在三个以下的情况进行分类讨论。希望能有朋友给出更好的方法。 首先,通过函数 sanwanj得到方程的系数矩阵,即追赶法方程的四个向量参数,接下来调用 追赶法(在intersanwj函数中),得到三次样条分段函数系数因子,然后进行多项式合并得 到分段函数的解析式,程序最后部分通过判断输入值的区间自动选择对应的分段函数并计算改 点的值。附:追赶法程序 chase %%%%%%%%%%%%%% function [newv,w,newu,newd]=sanwj(x,y,x0,y0,y1a,y1b) % 三弯矩样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边值条件a的二阶导数 y1a 和b的二阶导数 y1b,这里建议将y1a和y1b换成y2a和 y2b,以便于和三转角代码相区别 n=length(x);m=length(y); if m~=n error('x or y 输入有误,再来'); end v=ones(n-1,1);u=ones(n-1,1);d=zeros(n-1,1); w=2*ones(n+1); h0=x(1)-x0; h=zeros(n-1,1); for k=1:n-1 h(k)=x(k+1)-x(k); end v(1)=h0/(h0+h(1)); u(1)=1-v(1); d(1)=6*((y(2)-y(1))/h(1)-(y(1)-y0)/h0)/(h0+h(1)); % for k=2:n-1 v(k)=h(k-1)/(h(k-1)+h(k)); u(k)=1-v(k); d(k)=6*((y(k+1)-y(k))/h(k)-(y(k)-y(k-1))/h(k-1))/(h(k-1)+h(k)); end newv=[v;1]; newu=[1;u]; d0=6*((y(1)-y0)/h0-y1a)/h0;

开题报告(基于内容感知的图像缩放处理方法研究与实现)

长江大学 毕业设计(论文)开题报告 题目名称:基于内容感知的图像缩放方法研究与实现院 (系):计算机科学学院 专业班级:软工(实)11001班 学生姓名:邹会明 指导教师:余华平 辅导教师:余华平 开题报告日期: 2013年12月15日

基于内容感知的图像缩放方法研究与实现学生:邹会明院系:长江大学计算机科学学院 指导教师:余华平工作单位:长江大学计算机科学学院 1.题目来源 随着大屏幕显示设备的普及,4:3的图像信号与16:9的屏幕大小之间的矛盾变得日益突出。我们可以经常见到当4:3的图像变换为16:9的图像时,屏幕两侧或者上下会出现两条黑带。常规的图像等比例缩放显然已经不能满足这种需求,这就需要运用图像缩放技术对原始视频图像进行非等比例缩放。 图像缩放技术是数字图像处理领域一项基础而重要的技术,传统的图像缩放技术一般采用最近邻插值法,双线性插值法和双三次插值法这几种常用的差值法或者图像切割法进行缩放,这类方法存在的最大问题是,在将4:3视频图像转换为16:9时,X、Y方向是非等比例缩放,景物的畸变较大,使人难以接受。如果对图像切割,会使得图像部分内容丢失。而基于内容感知的图像缩放方法,它是采用Seam Carving技术的自适应图像缩放方法,通过不断移除或插入图像中对内容影响较小的缝合线,可以改变图像的长度比、实现图像重构、保留图像感兴趣区域、实现图像目标移除,实现图像尺寸的缩小和放大,并能够在缩放过程中保留图像重要内容,是目前非常有效的一种方法。所以基于内容感知的图像缩放方法研究与实现在自然图像处理方面有其较高应用价值和意义,以及研究的必要性。2.研究的目的及意义 1)目的 本文通过介绍一种基于内容感知的图像缩放方法,运用seam carving 技术,对图像上的关键部分和不重要区域进行计算,确定图像的能量低值点,找到最短路径,在纵横向上进行无缝裁剪,从而使得随意改变一个图像的高宽比但不让内容变得扭曲成为可能。 2)意义 电子产品的多样性对数字媒体提出了更高的要求,当把相同的图像或视频信息在不同分辨率和纵横比的电子产品上显示时,传统的缩放方法已经不能很好地满足用户的需求,传统的缩放方法一致地把这些信息缩放到目标大小,这样图像

(完整版)基于matlab的图像缩小算法

一、基于matlab图像缩小算法 缩小算法与放大算法不同,图像缩小是通过减少像素个数来实现的。因此,需要根据缩小的尺寸来选择合适的像素点,使得图像缩小后尽可能保持源图像特征。基于等间隔采样的缩小算法。 这种算法是通过对图像像素的均匀采样来保持所选择的像素仍旧保持像素的概貌特征。 算法1通过matlab实现可得: function small=big2small(A,h,l) [m,n]=size(A); k1=m/h;k2=n/l; small=zeros(h,l); for i=1:h for j=1:l i0=i*k1;j0=j*k2; i1=floor(i0+0.5); j1=floor(j0+0.5); small(i,j)=A(i1,j1); end end end 1、基于局部均值的缩小算法。 这种算法通过采样间隔dx,dy将原图像矩阵分割为一系列小的矩阵,并计算这些小矩阵的元素的和,再求其均值赋给目标矩阵相应的像素。这样就避免了算法1中某些未取到的元素不能将其信息反映到目标矩阵的缺点。 算法2通过matlab实现可得: function small=big2small2(A,h,l) [m,n]=size(A); %获得矩阵A大小 A=im2double(A); small=zeros(h,l); for i=1:h for j=1:l sum=0; i1=round((m/h).*(i-1)+1); %将矩阵分块 j1=round((n/l).*(j-1)+1); %i1,j1为矩阵小块左上角元素下标 i2=round((m/h).*i); j2=round((n/l).*j); %i2,j2为矩阵小块右下角元素下标 for ii=i1:i2 for jj=j1:j2 sum=sum+A(ii,jj); %计算矩阵内元素值的和 end end small(i,j)=sum/((i2-i1+1).*(j2-j1+1)); %将均值赋给目标矩阵 end end end

时域插值的几种图像放大方法

基于时域插值的几种图像放大方法 摘要:图像插值是图像比例缩放的常用方法。针对时域图像的放大问题,介绍了最邻近、双线性和双立方三种插值方法,并使用matlab 对其进行实现、分析。结果表明双立方插值得到的图像质量最高,最邻近和双线性速度较快。 1 引言 在数字图像处理中,图像的几何变换作为图像处理的基础操作之一,为图像分析提供了灵活多变的预处理模式,简化了后级处理过程,图像的几何变换还为生成特殊样式的图形提供了可能。在图像的几何变换中,图像的比例缩放是最常用的模式。图像的比例缩放是指对数字图像大小按某确定比例进行调整的过程。 对于数字图像 ),(P y x f = 则其缩放21k k ?倍的图像 ),(I 21y k x k f = 若21k k =,则I 为x 轴方向和y 轴方向等比例缩放的图像;否则,图像内的像素位置会发生相对变化,产生图像几何畸变。在本文中,讨论等比例放大图像时的情况,即 121≥=k k 由图像变换的思想,图像几何变换应当是源图像到目的图像矩阵的映射(前向映射)。前向映射时,由于系数k 为有理数,矩阵坐标为自然数的情况,此目的矩阵映射为空;同时目的矩阵存在无灰度值相对应的情况。 因此,可引入逆映射法,首先生成一个对应大小的空目的矩阵,分别计算目的矩阵每个像素点对应于原矩阵的位置,对于落在源图像两像素之间的点,可用

插值法为其映射一个灰度值,这个过程称为重采样。 重采样得出的灰度值由周围像素点的灰度和其权值特性决定,在此讨论三种常见的插值算法:最邻近(Nearest Neighbor )、双线性(Bilinear )和双立方(Bicubic )。 2 最邻近插值 最邻近插值是最简单的插值方式,它是将目的矩阵映射到源矩阵上,将其距离最近的像素点的值作为插值的值。 将目的矩阵的点),(I y x f =映射到源矩阵上, )/,/(21k y k x f 定义函数 ?????????? ?>-≤-=5 .05.0)(t t t t t t t h 图1 则目的矩阵的元素灰度值 ))/(),/((21k y h k x h f P = 在程序设计只需将转换到源矩阵的坐标四舍五入至整数 ))/(),/((21k y round k x round f P = 以4*4的像素矩阵RGB 色域为例 ??? ???????????(0,0,143) 5)(239,255,1 (0,79,255) (0,0,143)(0,79,255) (255,63,0) )(31,25,233 (127,0,0))(31,25,233 (0,0,143) (0,79,255) 5)(239,255,1)(31,25,233 (0,79,255) 5)(239,255,1 (255,63,0) 将其放大30倍,并与Matlab 库函数imresize()放大结果比较 ?? t ?? t t -

计算方法三次样条插值课程设计

摘要 本文细致的讲解了三次样条插值函数的产生及在实际中解决的问题,通过MATLAB的程序编写,可以将复杂的计算省去,直接的给出了三次样条插值的结果与实际结果间的误差,验证实际结果和理论值的一致性。避免了求解方程中的不必要计算,使求解效率得到显著的提高。 关键词插值函数三次样条插值 MATLAB

1 三次样条插值函数概论 当插值节点很多时,插值多项式的次数就会很高,这不仅增大了计算量,还会影响结果的精确度.虽然可以采用上述分段插值,但是主要缺点就是个分段接头处不光滑,插值函数的导数不连续,因此想构造这样的插值:既能分段的低次插值,又能保证接头处的光滑,就产生了三次样条插值函数. 1.1定义 设函数()f x 市区间[a,b]上的二次连续可微函数,在区间[a,b]上给处一个划分。设函数()f x 是区间[a,b]上的一个划分 011...n n a x x x x b -?=<<<<= 如果函数()S x 满足条件 (1)在每个小区间1[,]k k x x +(k=1,2,….,n )上()S x 是一个部超过m 次的多项式。 (2)在节点k x (k=1,2,….,n )处具有m-1阶的连续导数。 (3)()()(0,1,2,...) j j s x f x j n == 1.2三次样条差值函数的构造 由于三次样条插值我、函数s(x)的插值节点处的二阶导数存在,因此令各节点处的二阶导数为 ' ()(0,1,...,)k s x m k n == (1.01) 根据样条插值函数的定义,三次样条插值函数是s(x)在每一个小区间)1....,1,0](,[]1-=+n k x x k k 上市不超过三次的多项式。在每一个小区间 )1....,1,0](,[]1-=+n k x x k k 上,其二阶导数为线性函数,即 '' 11 11()k k k k k k k k x x x x s x m m x x x x ++++--=+-- (1.02) 对式(1.02)积分两次,则得到 k k k k k k k k k b x x a h x x m h x x m x s +-+-++=++)(6)(6)()(3 1 3 1 (1.03)

基于matlab的数字图像增强算法研究与实现

基于matlab的数字图像增强算法研究与实现 摘要图像在获取和传输过程中,会受到各种噪声的干扰,使图像退化质量下降,对分析图像不利。图像的平滑或去噪一直是数字图像处理技术中的一项重要工作。为此,论述了在空间域中的各种数字图像平滑技术方法。 关键字:数字图像;图像增强;平滑处理

目录 第一章、概述 2 1.1 图像平滑意义 2 1.2图像平滑应用 2 1.3噪声模 型 (3) 第二章 、图像平滑方法 5 2.1 空域低通滤波 5 2.1.1 均值滤波器 6 2.1.2 中值滤波器 6 2.2 频域低通滤波 7 第三章、图像平滑处理与调试 9 3.1 模拟噪声图像 9 3.2均值滤波法 11 3.3 中值滤波法 14 3.4 频域低通滤波法 17 第四章、总结与体会 19 参考文献 20 第一章、概述 1.1图像平滑意义 图像平滑(S m o o t h i n g)的主要目的是减少图像噪声。图像噪声来自于多方面,有来自于系统外部的干扰(如电磁波或经

电源窜进系统内部的外部噪声),也有来自于系统内部的干扰(如摄像机的热噪声,电器机械运动而产生的抖动噪声内部噪声)。实际获得的图像都因受到干扰而有噪声,噪声产生的原因决定了噪声分布的特性及与图像信号的关系。减少噪声的方法可以在空间域或在频率域处理。在空间域中进行时,基本方法就是求像素的平均值或中值;在频域中则运用低通滤波技术。 图像中的噪声往往是和信号交织在一起的,尤其是乘性噪声,如果平滑不当,就会使图像本身的细节如边缘轮廓,线条等模糊不清,从而使图像降质。图像平滑总是要以一定的细节模糊为代价的,因此如何尽量平滑掉图像的噪声,又尽量保持图像的细节,是图像平滑研究的主要问题之一。 1.2图像平滑应用 图像平滑主要是为了消除被污染图像中的噪声,这是遥感图像处理研究的最基本内容之一,被广泛应用于图像显示、传 输、分析、动画制作、媒体合成等多个方面。该技术是出于人类视觉系统的生理接受特点而设计的一种改善图像质量的方法。处理对象是在图像生成、传输、处理、显示等过程中受到多种因素扰动形成的加噪图像。在图像处理体系中,图像平滑是图像复原技术针对“一幅图像中唯一存在的退化是噪声”时的特例。 1.3噪声模型 1.3.1噪声来源 一幅图像可能会受到各种噪声的干扰,而数字图像的实质就是光电信息,因此图像噪声主要可能来源于以下几个方面:光电传感器噪声、大气层电磁暴、闪电等引起的强脉冲干扰、

图像缩放算法比较分析(IJIGSP-V5-N5-7)

I.J. Image, Graphics and Signal Processing, 2013, 5, 55-62 Published Online April 2013 in MECS (https://www.doczj.com/doc/0f5402849.html,/) DOI: 10.5815/ijigsp.2013.05.07 A Comparative Analysis of Image Scaling Algorithms Chetan Suresh Department of Electrical and Electronics Engineering, BITS Pilani Pilani - 333031, Rajasthan, India E-mail: shivchetan@https://www.doczj.com/doc/0f5402849.html, Sanjay Singh, Ravi Saini, Anil K Saini Scientist, IC Design Group, CSIR – Central Electronics Engineering Research Institute (CSIR-CEERI) Pilani – 333031, Rajasthan, India Abstract—Image scaling, fundamental task of numerous image processing and computer vision applications, is the process of resizing an image by pixel interpolation. Image scaling leads to a number of undesirable image artifacts such as aliasing, blurring and moiré. However, with an increase in the number of pixels considered for interpolation, the image quality improves. This poses a quality-time trade off in which high quality output must often be compromised in the interest of computation complexity. This paper presents a comprehensive study and comparison of different image scaling algorithms. The performance of the scaling algorithms has been reviewed on the basis of number of computations involved and image quality. The search table modification to the bicubic image scaling algorithm greatly reduces the computational load by avoiding massive cubic and floating point operations without significantly losing image quality. Index Terms—Image Scaling, Nearest-neighbour, Bilinear, Bicubic, Lanczos, Modified Bicubic I.I NTRODUCTION Image scaling is a geometric transformation used to resize digital images and finds widespread use in computer graphics, medical image processing, military surveillance, and quality control [1]. It plays a key role in many applications [2] including pyramid construction [3]-[4], super-sampling, multi-grid solutions [5], and geometric normalization [6]. In surveillance-based applications, images have to be monitored at a high frame rate. Since, the images need not be of the same size, image scaling is necessary for comparison and manipulation of images. However, image scaling is a computationally intensive process due to the convolution operation, which is necessary to band-limit the discrete input and thereby diminishes undesirable aliasing artifacts [2]. Various image scaling algorithms are available in literature and employ different interpolation techniques to the same input image. Some of the common interpolation algorithms are the nearest neighbour, bilinear [7], and bicubic [8]-[9]. Lanczos algorithm utilizes the 3-lobed Lanczos window function to implement interpolation [10]. There are many other higher order interpolators which take more surrounding pixels into consideration, and thus also require more computations. These algorithms include spline [11] and sinc interpolation [12], and retain the most of image details after an interpolation. They are extremely useful when the image requires multiple rotations/distortions in separate steps. However, for single-step enlargements or rotations, these higher-order algorithms provide diminishing visual improvement and processing time increases significantly. Novel interpolation algorithms have also been proposed such as auto-regression based method [13], fuzzy area-based scaling [14], interpolation using classification and stitching [15], isophote-based interpolation [16], and even interpolation scheme combined with Artificial Neural Networks [17]. Although these algorithms perform well, they require a lengthy processing time due to their complexity. This is intolerable for real-time image scaling in video surveillance system. Hence, these algorithms have not been considered for the comparative analysis in this paper. In this paper, firstly, image interpolation algorithms are classified and reviewed; then evaluation and comparison of five image interpolation algorithms are discussed in depth based on the reason that evaluation of image interpolation is essential in the aspect of designing a real-time video surveillance system. Analysis results of the five interpolation algorithms are summarized and presented. II.I MAGE S CALING Image scaling is obtained by performing interpolation over one or two directions to approximate a pixel’s colour and intensity based on the values at neighbouring

数字图像处理中常用的插值方法

分类: 算法 数字图像处理中常用的插值方法 2010-11-15 14:05 在做数字图像处理时,经常会碰到小数象素坐标的取值问题,这时就需要依据邻近象如:做地图投影转换,对目标图像的一个象素进行坐标变换到源图像上对应的点时,数,再比如做图像的几何校正,也会碰到同样的问题。以下是对常用的三种数字图像 1、最邻近元法 这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象

对于 (i, j+v),f(i, j) 到 f(i, j+1) 的灰度变化为线性关系,则有: f(i, j+v) = [f(i, j+1) - f(i, j)] * v + f(i, j) 同理对于 (i+1, j+v) 则有: f(i+1, j+v) = [f(i+1, j+1) - f(i+1, j)] * v + f(i+1, j) 从f(i, j+v) 到 f(i+1, j+v) 的灰度变化也为线性关系,由此可推导出待求象素灰度的计算 f(i+u, j+v) = (1-u) * (1-v) * f(i, j) + (1-u) * v * f(i, j+1) + u * (1-v) * f(i+1, j) 双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结性质,使高频分量受损,图像轮廓可能会有一点模糊。 3、三次内插法 该方法利用三次多项式S(x)求逼近理论上最佳插值函数sin(x)/x, 其数学表达式为: 待求像素(x, y)的灰度值由其周围16个灰度值加权内插得到,如下图:

待求像素的灰度计算式如下:f(x, y) = f(i+u, j+v) = ABC 其中:

图像增强方法的研究

图像增强方法的研究 摘要 数字图像处理是指将图像信号转换成数字格式并利用计算机对其进行处理的过程。在图像处理中,图像增强技术对于提高图像的质量起着重要的作用。本文先对图像增强的原理以及各种增强方法进行概述,然后着重对灰度变换、直方图均衡化、平滑和锐化等几种常用的增强方法进行了深入的研究,在学习数字图像的基本表示与处理方法的基础上,针对图像增强的普遍性问题,研究和实现常用的图像增强方法及其算法,通过Matlab实验得出的实际处理效果来对比各种算法的优缺点,讨论不同的增强算法的适用场合,并对其图像增强方法进行性能评价。如何选择合适的方法对图像进行增强处理,是本文的主要工作,为了突出每种增强方法的差异,本文在Matlab的GUI图形操作界面中集合了四种常用算法的程序,以达到对各种算法的对比更直观和鲜明的效果。 关键词:图像增强直方图均衡化灰度变换平滑锐化

目录 1 图像增强的基本理论 (3) 1.1 课题背景及意义 (3) 1.2 课题的主要内容 (4) 1.3 数字图像基本概念 (5) 1.3.1数字图像的表示 (5) 1.3.2 图像的灰度 (5) 1.3.3灰度直方图 (5) 1.4 图像增强概述 (6) 1.5图像增强概述 (8) 1.5.1图像增强的定义 (8) 1.5.2常用的图像增强方法 (8) 1.5.3图像增强的现状与应用 (9) 2 图像增强方法与原理 (10) 2.1 图像变换 (10) 2.1.1 离散图像变换的一般表达式 (10) 2.1.2 离散沃尔什变换 (11) 2.2 灰度变换 (12) 2.2.1 线性变换 (12) 2.2.2 分段线性变换 (13) 2.2.3 非线性变换 (13) 2.3 直方图变换 (14) 2.3.1 直方图修正基础 (14) 2.3.2 直方图均衡化 (16) 2.3.3 直方图规定化 (17) 2.4 图像平滑与锐化 (18) 2.4.1 平滑 (18) 2.4.2 锐化 (19)

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

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()来实现双线性内插值算法。

相关主题
文本预览
相关文档 最新文档