4

箱ひげ図、ガウス図、メキシコの帽子などの画像処理フィルターに関して、Matlabの2Dおよび3Dプロット関数を理解しようとしました...

フィルタのカーネル、たとえば各セルの係数を含む5x5行列のみを取得しました。ezsurfcが機能せず、理解できません。代わりにサーフは機能しますが、グリッドとそれをより細かく滑らかにする方法についての手がかりがありませんでしたか?

サーフについての私の理解は、各パラメーターに同じディメンションが必要であるということです。カーネルを20x20以上にすることなく、どのようにすればよいでしょうか。アイデアは、私が投稿した例のような出力を取得することです。フィルターの20x20グリッドマスクについて言及しました。滑らかさと平坦化には5x5よりも多くの係数が必要なように見えるからです...私は正しいですか、それとも完全に間違っていますか?

私はすでに次のmatlabコードを試しました。たとえば、ラプラスフィルターの例です。

[x,y] = meshgrid(1:1:5); %create a 5x5 matrix for x and y (meshes)
z = [0 1 2 1 0; 1 3 5 3 1;2 5 9 5 2; 1 3 5 3 1;0 1 2 1 0]; % kernel 5x5
surf(x,y,z);

それは私にその出力を与えます: 現在の出力

では、その5x5カーネル情報から細かく細かい2Dおよび3Dプロットを生成するにはどうすればよいでしょうか。よろしくお願いします!

PS:うまくいけば、私のコードのインデントが台無しにされていない...それ以外の場合は自由に編集してください-これはStackOverflowへの私の最初の投稿です。:-)

私が取得したいのは、次の2つの例のようなものです。 例1 例2

4

1 に答える 1

5

interp2を使用して、視覚化の目的で同じグリッドサイズの中間値を見つけることができます

step = 0.1; % granularity
[xn,yn] = meshgrid(1:step:5); % define finer grid
zn = interp2(x,y,z,xn,yn); % get new z values 
surf(xn,yn,zn);

ここに画像の説明を入力してください

デフォルトの線形補間法を使用して、元のカーネルに最も近い近似値を取得することに注意してくださいinterp2(x,y,z,xn,yn,'linear')。他の方法を使用すると、使用するカーネルがよりスムーズになりますが、それらの3D形状は異なります。したがって、それはあなたの用途と用途に依存します。

更新

既知のカーネルでデータを近似しようとすることで、アップサンプリングの不適切な問題をはるかに高い解像度にバイパスできます(逆再構成は、仮想の「ダウンサンプリングがナイキストサンプリングレートを尊重する場合にのみ可能です)。調整できます。

たとえば、最大値の周りで等方的に崩壊する対称カーネルの例を示しているので、ガウス関数を使用できます。MATLABはfspecial関数を介してこれを行います。

基礎となる関数(ガウス関数など)を想定し、現在のカーネルから定義されたパラメーターを使用します(つまり、関数をデータに適合させます)

% use max location, amplitude and std from your kernel
max_z = max(z(:));
std_z = std(z(:));

% Set of tunable parameters (size of grid & granularity)
bounds_grid = [30 30]; grid bounds
step = 0.5; % resolution

% Grid
siz = (bounds_grid-1)/2;
[x,y] = meshgrid(-siz(2):step:siz(2),-siz(1):step:siz(1));

% Gaussian parameters
s = std_z; m = 0;

% Analytic function
g = exp(-((x-m).^2 + (y-m).^2)/(2*s*s));
g(g<eps*max(g(:))) = 0;
g = max_z*g./max(g(:));

surf(g);

このようにして、ガウスローブのカーネルのパラメーターを尊重しますが、最終的なガウスカーネルのグリッドサイズと解像度を制御します。

いくつかの例:

ここに画像の説明を入力してください

于 2012-09-26T16:59:30.313 に答える