データ解析をしていると、「データの勾配を求めたい」と思う場面はよくあるかと考えます。例えば、信号処理における微分画像データにおけるエッジ検出なども含まれるかと考えます。MATLABには、エッジ検出を行うための専用関数が Image Processing Toolbox に用意されています。例えば関数imgradientやimgradientxyなどです。「Image Processing Toolboxがない…」場合や「とりあえず勾配を確認したい」という場合には、まず関数gradientを使ってみるのもよいかと考えます。

gradient 関数を使うことで、配列や画像データの各方向における勾配(変化量)を簡単に計算できます。シンプルな関数ですが、データの変化を把握するうえで非常に便利だと感じています。

※サンプルコードは文末にあります。

% シンプルなサンプル
clear
x = -2:0.2:2;
y = x';
z = x .* exp(-x.^2 - y.^2);

figure
pcolor(x,y,z)
shading flat
figure
[px,py] = gradient(z);
quiver(x,y,px,py,'r')
xlim([-2 2])
ylim([-2 2])
% clownデータでのサンプル
clear
load clown
[FX,FY] = gradient(X);
imagesc(X)

% X方向の勾配の可視化
imagesc(FX)
colorbar
clim([-50 50])

% Y方向の勾配の可視化
imagesc(FY)
colorbar
clim([-50 50])

MATLAB / LabVIEW関連の投稿をXやYoutubeでしています。
フォローしていただけますと幸いです。

X: https://x.com/SCISEL1990
YouTube:https://www.youtube.com/@scisel