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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab——图像缩放(插值法)

發布時間:2024/7/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab——图像缩放(插值法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗內容:

????用雙線性內插法實現位深度為8的灰度圖像的縮放。

?

思路:

?????輸入原圖像以及縮放后圖像的像素要求(寬度*高度),處理后輸出新圖像。

????我是用matlab來實現scale(input_img,scale_size)函數的,輸入圖像路徑以及要求實現的寬度scale_w和高度值scale_h即可。通過matlab把原圖像轉化為img矩陣,這樣矩陣img(a, b)元素的值就是原圖像高度為a,寬度為b處的像素值。

???設處理前后圖像的寬度和高度分別為w、h,scale_w、scale_h。

??? 如上圖所示,row對應的是高度,設為x軸;col對應的是寬度,設為y軸;value對應的是灰度值,設為z軸。

?

??? 通過縮放比例,可以求得新圖像B在(i,j)處對應原圖像的點為(x,y)(其中x= i*h/scale_h,y= j*w/scale_w)。

但是這兩個值可能為浮點數,而像素中的位置是整數,所以這個點在原圖像中對應的可能是“虛”點。所以,我們需

要根據找該“虛”點周圍的四個點來進行雙線性插值得到新圖像的灰度值。我們應該取的是(x,y)鄰近的四個像素

(x0,y0) 、(x0,y1) 、(x1,y0) 、(x1,y1),它們對應的灰度值為f(x0,y0) 、f(x0,y1)、 f(x1,y0)、 f(x1,y1)。

??

??? 先對x方向進行插值,再對y方向進行插值,計算如下:

????

????

????

?

??? 反過來,先對y方向:

????

????

????

?

??? 顯然,鄰近像素的x1-x0 = y1-y0 = 1
??? 整理式子得到:

?

??? 這里u、v分別是x、y的小數部分,即u = x - x0; v = y - y0

?????? 要注意的是:上述公式img(a,b)中的a和b不能小于1,所以當x和y小于1時需要將其重新賦值為1。

?

代碼:

function output_img = scale(input_img, scale_size) %Input - input_img is a two-dimensional matrices storing image % - scale_size is a tuple of [width, height] defining the spatial resolution of output %Output - output_img is the same as input_imgimg = imread(input_img); %讀取輸入圖片的數據 [h,w] = size(img); %獲取行和列,即原圖的高度和寬度scale_w = scale_size(1); %根據輸入獲得縮放后的新寬度 scale_h = scale_size(2); %根據輸入獲得縮放后的新高度 output_img = zeros(scale_h, scale_w); %初始化for i = 1 : scale_h %縮放后的圖像的(i,j)位置對應原圖的(x,y)for j = 1 : scale_wx = i * h / scale_h;y = j * w / scale_w;u = x - floor(x);v = y - floor(y); %取小數部分if x < 1 %邊界處理x = 1;endif y < 1y = 1;end%用原圖的四個真實像素點來雙線性插值獲得“虛”像素的像素值output_img(i, j) = img(floor(x), floor(y)) * (1-u) * (1-v) + ...img(floor(x), ceil(y)) * (1-u) * v + ...img(ceil(x), floor(y)) * u * (1-v) + ...img(ceil(x), ceil(y)) * u * v;end endimwrite(uint8(output_img), '../output_img.png'); %保存處理后的圖像 imshow(input_img); %顯示原圖 figure,imshow(uint8(output_img)) %顯示處理后的圖像

運行時若圖片在代碼上一級目錄,則輸入scale('../a.png', [450,300]);

?

效果圖:

原圖為384*256:

縮小成192*128:??

放大成450*300:

縮放成500*200:

?

//

?轉載:https://blog.csdn.net/Stella_Chan/article/details/78025020?locationNum=5&fps=1

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Matlab——图像缩放(插值法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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