日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab彩色图像缩放(双线性与双立方插值)

發布時間:2025/3/11 循环神经网络 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab彩色图像缩放(双线性与双立方插值) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雙線性插值原理可以參考這篇博文:雙線性內插法
立方插值的推導我參考的這篇文章:Cubic interpolation
數學推導過程上面兩篇文章解釋得還是比較清楚,可以自己拿筆推一推,至于雙線性和雙立方可以理解為先行(或列)插值再列(或行)插值。

程序代碼:

雙線性插值函數
BilinearInterpolae.m

function imgn = BilinearInterpolae(img,m,n)%取出單個通道imgR = img(:, :, 1);[h, w] = size(imgR);for t= 1:3for i = 1:h*m %新高度,即行for j = 1:w*n %新寬度,即列x = i/m; %坐標(i,j)對應原圖中(x,y);x/i=h/(h*m)y = j/n; u = x-floor(x); %取得虛坐標x的小數部分 v = y-floor(y);if x < 1 %,x,y可能對應原圖中非整數坐標位置,所以需要進行邊界處理x = 1;endif x > hx = h;endif y < 1y = 1;endif y > wy = w;end%按權重進行雙線性插值imgn(i,j,t) = img(floor(x), floor(y), t)*(1-u)*(1-v)+ ...img(floor(x), ceil(y), t)* (1-u) * v + ...img(ceil(x), floor(y), t)* u * (1-v) + ...img(ceil(x), ceil(y), t)* u * v; endendend end

三次插值函數
cubicInterpolate.m

%----------- p = [p1 p2 p3 p4]----------- %---------------f(-1) f(0) f(1) f(2)-----------function value = cubicInterpolate(p,x) %p的大小4*1p = double(p);a = -0.5*p(1) + 1.5*p(2) - 1.5*p(3) + 0.5*p(4);b = p(1) - 2.5*p(2) + 2*p(3) - 0.5*p(4);c = 0.5*p(3) - 0.5*p(1);d = p(2);value=a*x^3 + b*x^2 + c*x + d; end

雙立方插值函數(調用三次插值函數)
bicubicInterpolate.m

function revalue=bicubicInterpolate(p,x,y) %x,y被包含于[0,1]之間arr = zeros(4,1);for i=1:4arr(i) = cubicInterpolate( p(i,1:4), y); %先行插值endrevalue = cubicInterpolate(arr,x); %再列插值end

主程序
mian.m

clear all; close all; clc;imgsrc = imread('parrot-1088-725.jpg'); img = imresize(imgsrc, [floor(725/5),floor(1088/5)]); %imshow(img);m = 4; %放大或縮小的寬度的倍數 n = 4; %放大或縮小的高度的倍數%取出單個通道 imgR = img(:, :, 1); [h, w] = size(imgR);%%雙線性插值 imgn2 = BilinearInterpolae(img,4,4);%%雙立方插值 imgn3 = zeros(h*m,w*n); %初等行變換[rot|E]——>[E|rot'] %rot'=[1/m 0 0;0 1/n 0;0 0 1] rot = [m 0 0;0 n 0;0 0 1]; for t = 1:3for i = 1:h*mfor j = 1:w*ncoord = [i j 1]/rot; %縮放后的圖像像素坐標coordinate在原像素中的坐標pix=[i/m j/n 1]u = coord(1)-floor(coord(1)); %x方向(縱軸)虛坐標與左上點實坐標相減的小數部分v = coord(2)-floor(coord(2)); %y方向(橫軸)虛坐標與左上點實坐標相減的小數部分if coord(1) < 2 %邊界處理,也可以用卷積時常用的邊界擴展防止越界coord(1) = 2;endif coord(1) > h-2coord(1) = h-2;endif coord(2) < 2coord(2) = 2;endif coord(2) > w-2coord(2) = w-2;endx0=floor(coord(1)); %左上角點縱坐標,rowy0=floor(coord(2)); %左上角點橫坐標,colRec_pixel = img(x0-1:x0+2, y0-1:y0+2, t); %虛坐標(x,y)坐標的16鄰域的像素imgn3(i,j,t) = bicubicInterpolate(Rec_pixel, u, v); %雙立方插值 endend endfigure(1),imshow(uint8(img)); figure(2);imshow(imgn2); figure(3);imshow(uint8(imgn3));

原圖:

雙線性插值效果圖
雙立方插值效果圖
線性插值和三次插值但從效果上來說我沒看出明顯的差別,但是理論上應該是三次插值比二次插值好

代碼參考了以下兩篇博文,部分地方按自己的理解做了修改
https://blog.csdn.net/ywxk1314/article/details/81286413?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

https://blog.csdn.net/weixin_33895475/article/details/94746783

總結

以上是生活随笔為你收集整理的matlab彩色图像缩放(双线性与双立方插值)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。