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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

图像梯度

發布時間:2023/12/15 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 图像梯度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像梯度

1.圖像的表達

這里我們討論2D圖像,一般圖像的存儲格式是一個二維矩陣,每個位置對應圖像的像素值,用數學描述

[z = I(x,y)
]

(x,y) 代表圖像坐標(某個點的坐標),(z) 代表此點的像素值(強度值),所以圖像可以看作一個二元的函數(離散的),將圖像在三維坐標中畫出來,如下圖所示,強度值的高低代表了曲面的高低。

http://www.cse.psu.edu/~rtc12/CSE486/lecture02.pdf

2. 圖像的梯度

既然可以將圖像看作是一個二元函數,那么自然想到考慮二元函數的梯度(一元函數是導數),因為圖像是離散的,所以和一般的連續函數還有些不同。離散的話,就要考慮數值方法求梯度。

2.1 數值微分

根據泰勒級數展開式

[f(x+h) = f(x)+hf'(x)+frac{1}{2}h^2f''(x)+frac{1}{3!}h^3f'''(x)+O(h^4)
]

[f(x+h)-f(x)=hf'(x)+frac{1}{2}h^2f''(x)+O(h^3)
]

[frac{f(x+h)-f(x)}{h}=f'(x)+O(h)
]

這就是有限向前差分,在圖像中,例如在x方向,對應的值就是(f(x+1,y)-f(x,y))

根據泰勒級數展開式

[f(x-h) = f(x)-hf'(x)+frac{1}{2}h^2f''(x)-frac{1}{3!}h^3f'''(x)+O(h^4)
]

[f(x)-f(x-h)=hf'(x)-frac{1}{2}h^2f''(x)+O(h^3)
]

[frac{f(x)-f(x-h)}{h}=f'(x)+O(h)
]

這就是有限向后差分,在圖像中,例如在x方向,對應的值就是(f(x,y)-f(x-1,y))

根據泰勒級數展開式

[f(x+h)-f(x-h) = f(x)+hf'(x)+frac{1}{2}h^2f''(x)+frac{1}{3!}h^3f'''(x)+O(h^4) -\
{f(x)-hf'(x)+frac{1}{2}h^2f''(x)-frac{1}{3!}h^3f'''(x)+O(h^4)}\
=2hf'(x)+frac{2}{3!}h^3f'''(x)+O(h^4)
]

[frac{f(x+h)-f(x-h)}{2h} =f'(x)+O(h^2)
]

這就是有限中心差分,在圖像中,例如在x方向,對應的值就是(f(x+1,y)-f(x-1,y)),因為展開式后面跟的是h的2階無窮小,所以中心差分比向前、向后都要準確。

2.2 圖像中的梯度

向前,(frac{f(x+h)-f(x)}{h}),在圖像中(f(x+1,y)-f(x,y))
向后,(frac{f(x)-f(x-h)}{h}),在圖像中(f(x,y)-f(x-1,y))
中心,(frac{f(x+h)-f(x-h)}{2h}),在圖像中(f(x+1,y)-f(x-1,y))

如下圖所示,x方向的梯度圖,可以看到水平方向的線條不明顯了,只留下了垂直方向的線條,這是因為x方向梯度的數值的大小代表水平方向強度值變換的大小,因為水平的線條可能都是一種強度,所以數值都差不多,所以都消失了,而在垂直方向變化比較大。y方向同理,可以看見水平方向的線條不明顯,垂直方向的線條明顯。

2.3 Matlab代碼

img = imread('img.jpg');
gray = double(rgb2gray(img));
wsize = size(gray,2);
hsize = size(gray,1);
%Normalize,因為差分可能求出負值,所以做一個歸于1化,將數值映射到[0,255]
h = Normalize(gray(:,3:wsize)-gray(:,1:wsize-2));%中心差分
v = Normalize(gray(3:hsize,:)-gray(1:hsize-2,:));%中心差分
hv = Normalize(sqrt(h(3:end,:).^2+v(:,3:end).^2)); %x,y方向合成

subplot(2,2,1);
imshow(uint8(gray));
title('灰度');

subplot(2,2,2);
imshow(uint8(hv));
title('xy方向合成');

subplot(2,2,3);
imshow(uint8(h));
title('x方向梯度');

subplot(2,2,4);
imshow(uint8(v));
title('y方向梯度');
function o = Normalize(img)
f = img(:)'; % 展開矩陣為一列,然后轉置為一行。
m = mapminmax(f, 0, 255); % 歸一化。
o = reshape(m, size(img)); % 還原為原始矩陣形式。此處不需轉置回去,因為reshape恰好是按列重新排序
end

總結

以上是生活随笔為你收集整理的图像梯度的全部內容,希望文章能夠幫你解決所遇到的問題。

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