当前位置:首页 » 操作系统 » 图像双线性插值算法

图像双线性插值算法

发布时间: 2024-09-28 11:06:31

❶ 对图像进行双线性插值算法后,图像出现块效应怎么解决

interpolation 插值方法,类似于 CV_INTER_NN 方法。当图像放大时,dst 输出图像,该方法可以避免波纹出现。当图像缩小时候;
src 输入图像,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样.
该方法就是用于将图像改变为dst定义的大小..
CV_INTER_CUBIC - 立方插值, CvArr* dstvoid cvResize( const CvArr* src,然后根据你选择的插值方法进行插值, int interpolation=CV_INTER_LINEAR ):
CV_INTER_NN - 最近邻插值.

❷ 【图像处理】双线性插值法扩展图像像素及其代码实现(亚像素)

提升图像精度的艺术:亚像素插值法深度解析


在数字图像处理的世界里,你是否曾好奇如何在不改动硬件的前提下,提升我们日常处理的图像精度?让我们一起探索一个可能的解决方案——亚像素图像,它就像图像的隐形扩展,通过数学魔法提升细节表现。


想象一下,一张实际尺寸为8cm x 8cm的精美图片,被计算机压缩成只有4 x 4个像素的版本。每个像素代表的实际上是现实中的2cm x 2cm区域,这种粗犷的采样会导致图像模糊,无法充分捕捉图像的细微特征。因为每个像素只能固定一种颜色,我们渴望的是一种能够精细呈现细节的图像处理方式。


亚像素的诞生


解决这个问题的答案就隐藏在亚像素的概念里。它并非简单的像素堆砌,而是在像素点之间巧妙添加新点,通过数学运算(如插值)创造更精细的图像。亚像素图像就像是在原始像素网上的精雕细琢,通过双线性插值,我们在每个像素点间生成了新的像素,从而增加了分辨率,提高了测量的精度。


双线性插值的力量


双线性插值,如魔术般在图像的像素点间编织新的线条。首先,它在Q11和Q21之间进行线性插值,得到中点R1,接着在R1与R2之间进行二次插值,从而诞生新像素点P。这个过程就像在二维坐标系中绘制一条连续的路径,每一步都旨在捕捉到图像的细微变化。


计算公式看似复杂,实则遵循了一个简单的道理:在两点间找到中点,然后逐步延伸。将这个原理应用到实际的像素值计算中,我们就能得到更加细腻的图像表现。


代码实践:双线性插值实战


在代码的世界里,我们通过读取图像、设置参数,然后对每个像素点进行预处理和插值计算。通过逐行、逐列的处理,双线性插值法为每个亚像素位置赋予了独特的色彩,提升图像的分辨率。


然而,这只是软件层面的提升,实际应用时,结合相机标定和深度信息至关重要。亚像素化后的图像测量,需要将像素值转换为实际尺寸,这是精度提升后的关键步骤。


总结与局限


亚像素图像处理为测量精度提供了新的可能,但它并非万能良药。在选择使用时,我们必须考虑实际应用场景和硬件限制。尽管软件算法的进步显着,但我们仍需明智地权衡,找到最适合的解决方案,让图像处理的精度提升在每个领域都能发挥出最佳效果。

❸ 锲剧墖鏀惧ぇ绠楁硶

锲惧儚鏀惧ぇ链夎稿氱畻娉曪纴鍏跺叧阌鍦ㄤ簬瀵规湭鐭ュ儚绱犱娇鐢ㄤ綍绉嶆彃鍊兼柟寮忋备互涓嬫垜浠灏嗗叿浣揿垎鏋愬嚑绉嶅父瑙佺殑绠楁硶锛岀劧钖庝粠鏀惧ぇ钖庣殑锲惧儚鏄钖﹀瓨鍦ㄨ壊褰╁け鐪燂纴锲惧儚镄勭粏鑺傛槸钖﹀缑鍒拌缉濂界殑淇濆瓨锛屾斁澶ц繃绋嬫墍闇镞堕棿鏄钖﹀垎閰嶅悎鐞嗙瓑澶氭柟闱㈡潵姣旇缉瀹冧滑镄勪紭锷c

褰撴妸涓涓灏忓浘镀忔斁澶х殑镞跺欙纴姣斿傛斁澶400%锛屾垜浠鍙浠ラ栧厛渚濇嵁铡熸潵镄勭浉闾4涓镀忕礌镣圭殑镩插僵鍊硷纴鎸夌収鏀惧ぇ鍊嶆暟镓惧埌鏂扮殑ABCD镀忕礌镣圭殑浣岖疆骞惰繘琛屽瑰簲镄勫~鍏咃纴浣嗘槸瀹冧滑涔嬮棿瀛桦湪镄勫ぇ閲忕殑镀忕礌镣癸纴姣斿俻镣圭殑镩插僵鍊煎嵈鏄涓嶅彲鐭ョ殑锛岄渶瑕佽繘琛屼及绠椼

链闾昏繎镣规彃鍊肩畻娉曟槸链绠鍗曚篃鏄阃熷害链蹇镄勪竴绉岖畻娉曪纴鍏跺仛娉曟槸灏嗘斁澶у悗链鐭ョ殑镀忕礌镣笔锛屽皢鍏朵綅缃鎹㈢畻鍒板师濮嫔奖镀忎笂锛屼笌铡熷嬬殑闾昏繎镄4锻ㄥ儚绱犵偣A,B,C,D锅氭瘆杈冿纴浠P镣圭殑镀忕礌鍊肩瓑浜庢渶闱犺繎镄勯偦杩戠偣镀忕礌鍊煎嵆鍙銆傚备笂锲句腑镄凯镣癸纴鐢变簬链鎺ヨ繎D镣癸纴镓浠ュ氨鐩存帴鍙朠=D銆

杩欑嶆柟娉曚细甯︽潵鏄庢樉镄勫け鐪熴傚湪A,B涓镣瑰勭殑镀忕礌鍊间细绐佺劧鍑虹幇涓涓璺宠穬锛岃繖灏辨槸鍑虹幇椹璧涘厠鍜岄敮榻跨瓑鏄庢樉璧版牱镄勫师锲犮傛渶涓磋繎鎻掑兼硶鍞涓镄勪紭镣瑰氨鏄阃熷害蹇銆

鍏跺仛娉曟槸灏嗘斁澶у悗链鐭ョ殑镀忕礌镣笔锛屽皢鍏朵綅缃鎹㈢畻鍒板师濮嫔奖镀忎笂锛岃$畻镄勫洓涓镀忕礌镣笰,B,C,D瀵笔镣圭殑褰卞搷(瓒婇潬杩慞镣瑰彇鍊艰秺澶э纴琛ㄦ槑褰卞搷涔熻秺澶)锛屽叾绀烘剰锲惧备笅銆

鍏跺叿浣撶殑绠楁硶鍒嗕笁姝ワ细

绗涓姝ユ彃鍊艰$畻鍑篈B涓ょ偣瀵笔镣圭殑褰卞搷寰楀埌e镣圭殑鍊笺

瀵圭嚎镐ф彃鍊肩殑鐞呜В鏄杩欐牱镄勶纴瀵逛簬AB涓ゅ儚绱犵偣涔嬮棿镄勫叾瀹冨儚绱犵偣镄勮壊褰╁硷纴璁ゅ畾涓虹洿绾垮彉鍖栫殑锛岃佹眰e镣瑰勭殑鍊硷纴鍙闇瑕佹垒鍒板瑰簲浣岖疆鐩寸嚎涓婄殑镣瑰嵆鍙銆傛崲鍙ヨ瘽璇达纴A,B闂翠换镒忎竴镣圭殑鍊煎彧璺烝,B链夊叧銆

绗浜屾ワ纴鎻掑艰$畻鍑篊D涓ょ偣瀵笔镣圭殑褰卞搷寰楀埌f镣圭殑鍊笺

绗涓夋ワ纴鎻掑艰$畻鍑篹f涓ょ偣瀵笔镣圭殑褰卞搷鍊笺

鍙岀嚎镐ф彃鍊肩畻娉旷敱浜庢彃鍊肩殑缁撴灉鏄杩炵画镄勶纴镓浠ヨ呜変笂浼氭瘆链闾昏繎镣规彃鍊肩畻娉曡佸ソ涓浜涳纴涓嶈繃杩愮畻阃熷害绋嶅井瑕佹参涓镣癸纴濡傛灉璁茬┒阃熷害锛屾槸涓涓涓嶉敊镄勬姌琛枫

鍙岀珛鏂规彃鍊肩畻娉曚笌鍙岀嚎镐ф彃鍊肩畻娉旷被浼硷纴瀵逛簬鏀惧ぇ钖庢湭鐭ョ殑镀忕礌镣笔锛屽皢瀵瑰叾褰卞搷镄勮寖锲存墿澶у埌闾昏繎镄16涓镀忕礌镣癸纴渚濇嵁瀵笔镣圭殑杩滆繎褰卞搷杩涜屾彃鍊艰$畻锛屽洜P镣圭殑镀忕礌鍊间俊鎭𨱒ヨ嚜16涓闾昏繎镣癸纴镓浠ュ彲寰楀埌杈幂粏镊寸殑褰卞儚锛屼笉杩囬熷害姣旇缉鎱銆

涓嶈繃鍙岀珛鏂规彃鍊肩畻娉曚笌鍙岀嚎镐ф彃鍊肩畻娉旷殑链璐ㄥ尯鍒涓崭粎鍦ㄤ簬镓╁ぇ浜嗗奖鍝岖偣镄勮寖锲达纴杩橀噰鐢ㄩ珮绾х殑鎻掑肩畻娉曪纴濡傚浘镓绀

瑕佹眰A锛孊涓ょ偣涔嬮棿e镣圭殑鍊硷纴闇瑕佸埄鐢ˋ,B锻ㄥ洿A-1,A,B,B 1锲涗釜镣圭殑镀忕礌鍊硷纴阃氲繃镆愮嶉潪绾挎х殑璁$畻锛屽缑鍒板厜婊戠殑镟茬嚎锛屼粠钥岀畻鍑篹镣圭殑鍊兼潵銆

镓璋撯滃弻钬濇垨钥呭彨钬滀簩娆♀濈殑镒忔濆氨鏄鍦ㄨ$畻浜嗘í钖戞彃鍊煎奖鍝岖殑锘虹涓婏纴鎶娄笂杩拌繍绠楁嫇灞曞埌浜岀淮绌洪棿锛屽啀璁$畻绾靛悜鎻掑煎奖鍝岖殑镒忔濄

鍙岀珛鏂规彃鍊肩畻娉曡兘澶熷缑鍒扮浉瀵规竻鏅扮殑鐢婚溃璐ㄩ噺锛屼笉杩囱$畻閲忎篃鍙桦ぇ銆傝ョ畻娉曞湪鐜板湪镄勪䌷澶氩浘镀忓勭悊杞浠朵腑链涓哄父鐢锛屾瘆濡侾hotoshop,After Effects,Avid,Final Cut Pro绛夈

涓轰简寰楀埌镟村ソ镄勫浘镀忚川閲忥纴鍦ㄤ互涓婄殑锘虹涓婏纴璁稿氭柊镄勭畻娉曚笉鏂娑岀幇锛屽畠浠浣跨敤浜嗘洿锷犲嶆潅镄勬敼杩涚殑鎻掑兼柟寮忋傝濡侭镙锋浔锛圔-SPline锛, 绫冲垏灏旓纸Mitchell锛夌瓑鎻掑肩畻娉曪纴瀹冧滑镄勭洰镄勬槸浣挎彃鍊肩殑镟茬嚎鏄惧缑镟村钩婊戯纴锲惧儚杈圭紭镄勮〃鐜版洿锷犲畬缇庛

涓庝笂杩扮粡鍏哥殑鎻掑兼柟娉曟渶澶х殑鍖哄埆鍦ㄤ簬锛 S-Spline 閲囩敤浜嗕竴绉嶈嚜阃傚簲鎶链锛岄偅浜涗紶缁熺殑鏂规硶镐绘槸渚濇嵁锻ㄥ洿镄勫儚绱犵偣𨱒ユ眰链鐭ョ偣镄勮壊褰╁硷纴涔熷氨鏄璇撮渶瑕佹眰瑙g殑镩插僵鍊间粎浠呬緷闱犺ュ儚绱犵偣鍦ㄥ浘镀忎腑镄勪綅缃锛岃岄潪瀹为檯镄勫浘镀忕殑镀忕礌淇℃伅锛岃岃嚜阃傚簲镙锋浔绠楁硶杩树细钥冭槛瀹为檯锲惧儚镄勫儚绱犱俊鎭銆 瀹为獙琛ㄦ槑锛岀粡杩 S-Spline 绠楁硶寰楀埌镄勫浘镀忔晥鏋滆佷紭浜庡弻绔嬫柟鎻掑肩畻娉曘

鐜板湪 S-Spline 绠楁硶鍙埚嚭鐜颁简澧炲己鐗 S-Spline XL锛屾柊鐗堟湰镄 S-Spline XL 绠楁硶杈 S-Spline 钥岃█鐢婚溃镄勯攼搴﹀缑鍒拌繘涓姝ュ炲己锛岀墿浣撶殑杞寤撴洿锷犳竻鏅帮纴杈圭紭镄勯敮榻跨幇璞″ぇ澶у噺寮憋纴锲惧儚镒熷弹镟村姞镊铹躲

鐜板湪鎴戜滑𨱒ュ逛互涓婂嚑绉嶆彃鍊肩畻娉曡繘琛屽疄闄呮祴璇曪纴鐪嬬湅瀹冧滑镄勬晥鏋溿傞栧厛镓揿紑铡熷嬬殑锲惧儚bird.jpg.杩欐槸涓涓鍒呜鲸鐜囦负360脳270镄勫浘镀忋

鎴戜滑閲囩敤 BenVista 鍏鍙歌宪钖岖殑 PhotoZoom Pro 2 杞浠讹纴鍦╬c鐢佃剳涓婅繘琛屾祴璇曪纴鐢佃剳镄凛PU閰岖疆涓篒nter Core 2 T5500 1.66GHz,鍒嗗埆閲囩敤浠ヤ笂5绉嶆彃鍊兼柟娉曟妸铡熷嫔浘镀忔斁澶8鍊嶅缑鍒5涓2880脳2160镄勫浘镀

瀵规瘆浠ヤ笂钖勫浘骞剁粨钖埚疄楠屾暟鎹锛屾垜鎶婃晥鏋滃弬鏁板垪涓惧备笅琛ㄣ

❹ 常见图像插值算法只有3种么

电脑摄像头最高只有130万像素的,800万是通过软件修改的。
何为数码插值(软件插值)
插值(Interpolation),有时也称为“重置样本”,是在不生成像素的情况下增加图像像素大小的一种方法,在周围像素色彩的基础上用数学公式计算丢失像素的色彩。简单地说,插值是根据中心像素点的颜色参数模拟出周边像素值的方法,是数码相机特有的放大数码照片的软件手段。
一、认识插值的算法
“插值”最初是电脑术语,后来引用到数码图像上来。图像放大时,像素也相应地增加,但这些增加的像素从何而来?这时插值就派上用场了。插值就是在不生成像素的情况下增加图像像素大小的一种方法,在周围像素色彩的基础上用数学公式计算丢失像素的色彩(也有些相机使用插值,人为地增加图像的分辨率)。所以在放大图像时,图像看上去会比较平滑、干净。但必须注意的是插值并不能增加图像信息。以图1为原图(见图1),以下是经过不同插值算法处理的图片。
1.最近像素插值算法
最近像素插值算法(Nearest Neighbour Interpolation)是最简单的一种插值算法,当图片放大时,缺少的像素通过直接使用与之最接近的原有像素的颜色生成,也就是说照搬旁边的像素,这样做的结果是产生了明显可见的锯齿(见图2)。
2.双线性插值算法
双线性插值算法(Bilinear Interpolation)输出的图像的每个像素都是原图中四个像素(2×2)运算的结果,这种算法极大程度上消除了锯齿现象(见图3)。 3.双三次插值算法
双三次插值算法(Bicubic Interpolation)是上一种算法的改进算法,它输出图像的每个像素都是原图16个像素(4×4)运算的结果(见图4)。这种算法是一种很常见的算法,普遍用在图像编辑软件、打印机驱动和数码相机上。 4.分形算法
分形算法(Fractal Interpolation)是Altamira Group提出的一种算法,这种算法得到的图像跟其他算法相比更清晰、更锐利(见图5)。
现在有许多数码相机厂商将插值算法用在了数码相机上,并将通过算法得到的分辨率值大肆宣传,固然他们的算法比双三次插值算法等算法先进很多,但是事实是图像的细节不是凭空造出来的。因为插值分辨率是数码相机通过自身的内置软件来增加图像的像素,从而达到增大分辨率的效果。
二、插值的影响
使用数码变焦拍出来的照片不清晰,这是数码变焦最遭人垢病的地方,事实上,这只是一种片面的说法。
数码变焦对照片清晰度的影响有多大,取决于数码相机在变焦时,CCD是否进行了插值运算。在使用高像素的情况下,如果采用数码变焦进行拍摄,则此时CCD并不会有任何插值运算,数码变焦对最终得到的数码照片的清晰度的影响将会因此而变得极其有限。举个例子,一台CCD像素为520万、最大分辨率为2560×1920的数码相机,如果采用2×的数码变焦来进行拍摄的话,那么成像过程中只会有一半CCD在工作。换句话说,数码相机并不会使用类似“在一个像素点周围添加八个像素点”的插值算法进行成像,而是通过降低分辨率的方法,即1280×960这个分辨率指标来进行成像。对于一般的数码照片来说,1280×960这个分辨率指标已经足够优秀了,它与2560×1920分辨率的差别将会因为没有插值运算的参与而变得可以接受。不过这种现象只限于某些比较高级的数码相机,对于那些千元以下的定焦数码相机来说,使用数码变焦就意味着必然的插值运算,牺牲分辨率的后果使得照片拍摄者只能有两个选择:要么得到一张模糊不清的“全尺寸”照片、要么得到一张质量可以保证但分辨率只有类似320×240这样的“迷你”照片。

❺ GPU上图像拼接的快速计算

图像拼接已被研究并广泛应用于计算机科学的许多领域,但在特征匹配、扭曲和混合步骤中存在大量计算。从而无法满足某些应用的实时性需求。幸运的是,已经在图形处理器单元 (GPU) 上开发并实现了一些可以加快拼接过程的相关并行操作。在本文中,我们使用统一计算设备架构 (CUDA) 提出了基于 GPU 的图像拼接的并行实现。我们在执行时间方面获得了比在中央处理单元 (CPU) 上实现更好的结果。在实验中使用集成 GPU GTX745 时,我们对大输入图像实现了高达 27.6 倍的加速比。

典型的拼接过程主要包括三个不同的图像处理步骤,即配准、扭曲和插值以及混合。图像配准是图像拼接的关键任务。配准是指在描绘同一场景的一对图像之间建立几何变换,该变换由一个8自由度的平面单应性决定。

GPU以其强大的并行计算能力吸引许多领域的研究,作为一种协处理器对计算量大的算法加速已成为实践的重要途径。在前人的研究中,他们都避免了考虑两个极其耗时的步骤,即特征匹配和随机样本共识(RANSAC)。作为图像配准中的两个关键过程,在提出的 GPU 加速并行算法中应考虑它们。

使用GPU并行计算会遇到两个限制

CUDA的出现解决了上述问题,并且CUDA使用C语言,最初为CPU编写的C语言函数可以移植到CUDA内核,无需修改。

在CUDA中,一定数量的线程被分组到一个块中,一定数量的块以规则的网格模式在逻辑上排列(见图1)。每个块都映射到一个多处理器,一个多处理器可以同时运行多个线程块。由于本地资源(寄存器和共享内存)在块之间进行划分,包含在同一块中的线程可以访问相同的共享内存并快速实现同步操作。但是,不同块中的线程并不能直接实现通信和同步。除了本地寄存器和共享内存,所有线程都可以访问全局内存、常量内存和纹理内存。

A. 特征匹配

令点 经过仿射变换后得到 ,即

向量 是平移分量, 控制缩放、旋转效果。利用齐次坐标系,方程(2)也可以写为

接着计算两幅图像特征点之间的欧几里得距离,并将距离按照升序排序,比较升序排序中第一和第二的比值如果小于某个阈值,则认为是匹配点。

由于 中有六个未知参数,随机选择3对不共线的点匹配 ,使用该矩阵 计算剩余 对匹配点的误差。执行大量迭代,直到内点对最多。可以使用最小二乘估计器估计所有六个参数。

B. 变形和插值

扭曲变形过程中,可能使像素点位置出现负值或者没有数值与之对应,在这种抢矿下需要插值算法创建更平滑和准确的数值,进一步减少翘曲中产生的变形。最常用的插值方法是最近邻插值、双线性插值和双三次插值。考虑到精度和计算复杂度之间的权衡,实验采用双线性插值算法。

C. 混合

为了实现并行计算,本文采用了基于羽化的混合方法,其混合函数可以表示为:

其中 是像素 的权重函数。

A. 并行匹配

匹配分为粗匹配和精匹配。粗匹配过程中,块线程数由特征元素数决定,每个块可以实现一个关键点之间的匹配,每个线程计算两个图像两个特征向量的距离。在计算完所有距离后,使用并行计算的归并排序对距离值排序。最后,所有块得到的匹配结果存储在全局内存中,然后传送到CPU。

精匹配过程,设计内核执行RANSAC迭代,只启动一个block,线程数为 ,首先用CPU将三个非共线点计算得到的变换矩阵 ,然后将 、阈值和剩余 个点传到GPU,判断内外点。

通过内存分配,可以实现精细匹配优化。

B. 平行变形和插值

将 矩阵的逆矩阵 存放在常量内存中,由于需要频繁地调用。将待校正的图像存放在纹理内存中,纹理内存是专门为本地访问模式设计的。

为了进一步提升性能,若两个坐标小数部分小于0.2则强度值分配为整数部分,否则使用双线性插值。

C. 并行混合

由于混合数是像素和像素的混合,因此线程数等于重叠部分包含的像素。令重叠图像的列数设置为16的倍数。 gridDim.x的大小等于重叠图像的行数,gridDim.y的大小等于重叠图像的列数重叠图像除以16。

基于 CPU 的算法在配备 16GMB DDR3 RAM 的 Intel Core i7-4790、3.60GHz 处理器上实现。基于 GPU 的算法在 NVIDIA GeForce GTX745 集成显卡上进行测试,每块最大 1024 个线程和 4096 MB 全局内存。

可以清楚地看到,这两种图像之间几乎没有差异。原因是实验中使用的GPU卡支持浮点计算,与CPU版本相比产生的误差非常小。

在本文中,我们提出了一种使用 CUDA 架构在 GPU 上运行的并行图像拼接方法。顺序算法通过几个 CUDA 内核转换为并行版本。通过使用不同类型的内存,我们实现了并行算法的优化。同时,将GPU获得的结果与CPU获得的结果进行比较,我们实现了高达27.6的加速比。尽管所提出的方法显着提高了计算性能,但仍有许多工作要做。例如,更精确的插值方法(双三次插值)和可变权重 c( x, y) 可以考虑进一步改善镶嵌结果。此外,并行镶嵌算法也可以在多个GPU平台上运行,对于大数据可以更有效地执行算法。在今后的工作中,我们将一一处理这些问题。

❻ 图像双三次插值算法原理及python实现

一. 图像双三次插值算法原理:

        假设源图像 A 大小为 m*n ,缩放后的目标图像 B 的大小为 M*N 。那么根据比例我们可以得到 B(X,Y) 在 A 上的对应坐标为 A(x,y) = A( X*(m/M), Y*(n/N) ) 。在双线性插值法中,我们选取 A(x,y) 的最近四个点。而在双立方插值法中,我们选取的是最近的16个像素点作为计算目标图像 B(X,Y) 处像素值的参数。如图所示:

        如图所示 P 点就是目标图像 B 在 (X,Y) 处对应于源图像中的位置,P 的坐标位置会出现小数部分,所以我们假设 P 的坐标为 P(x+u,y+v),其中 x,y 分别表示整数部分,u,v 分别表示小数部分。那么我们就可以得到如图所示的最近 16 个像素的位置,在这里用 a(i,j)(i,j=0,1,2,3) 来表示。 

        双立方插值的目的就是通过找到一种关系,或者说系数,可以把这 16 个像素对于 P 处像素值的影响因子找出来,从而根据这个影响因子来获得目标图像对应点的像素值,达到图像缩放的目的。 

        BiCubic基函数形式如下:

二. python实现双三次插值算法

from PIL import Image

import numpy as np

import math

# 产生16个像素点不同的权重

def BiBubic(x):

    x=abs(x)

    if x<=1:

        return 1-2*(x**2)+(x**3)

    elif x<2:

        return 4-8*x+5*(x**2)-(x**3)

    else:

        return 0

# 双三次插值算法

# dstH为目标图像的高,dstW为目标图像的宽

def BiCubic_interpolation(img,dstH,dstW):

    scrH,scrW,_=img.shape

    #img=np.pad(img,((1,3),(1,3),(0,0)),'constant')

    retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)

    for i in range(dstH):

        for j in range(dstW):

            scrx=i*(scrH/dstH)

            scry=j*(scrW/dstW)

            x=math.floor(scrx)

            y=math.floor(scry)

            u=scrx-x

            v=scry-y

            tmp=0

            for ii in range(-1,2):

                for jj in range(-1,2):

                    if x+ii<0 or y+jj<0 or x+ii>=scrH or y+jj>=scrW:

                        continue

                    tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)

            retimg[i,j]=np.clip(tmp,0,255)

    return retimg

im_path='../paojie.jpg'

image=np.array(Image.open(im_path))

image2=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)

image2=Image.fromarray(image2.astype('uint8')).convert('RGB')

image2.save('BiCubic_interpolation.jpg')

三. 实验结果:

四. 参考内容:

         https://www.cnblogs.com/wojianxin/p/12516762.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104942406

热点内容
什么是设置服务器怎么弄 发布:2024-11-24 14:01:59 浏览:333
u盘加密启动电脑 发布:2024-11-24 13:30:44 浏览:906
宣片脚本词 发布:2024-11-24 13:30:33 浏览:494
pythonforif一行 发布:2024-11-24 13:28:19 浏览:394
服务器集群怎么实现 发布:2024-11-24 13:26:51 浏览:599
秒评源码 发布:2024-11-24 13:24:30 浏览:126
联想笔记本e450c怎么看配置 发布:2024-11-24 13:22:23 浏览:87
c语言如何运行程序 发布:2024-11-24 13:20:03 浏览:449
访问oracle其他用户 发布:2024-11-24 13:18:32 浏览:69
年青人的游戏密码一般是什么 发布:2024-11-24 13:17:01 浏览:786