MATLAB の画像にスライディング ウィンドウ操作を適用した後、境界ピクセル (パディングを使用して計算されたピクセル) を設定して、それらを意味のないものとしてマークしstdfilt(i, ones(5, 5))
たいと思います。NaN
この例では、最も外側の 2 つの行と列を に設定しますNaN
。M * M ウィンドウが与えられた場合、(M - 1) / 2 ピクセル幅の境界線を特定の値に設定するにはどうすればよいですか?
質問する
1206 次
3 に答える
3
を行列r
( の結果stdfilt
) とします。NaN を境界線に割り当てる方法の例を次に示します。一般に、正しいインデックスを指定する必要があります。
>> r = rand(4)
r =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> r([1, end], :) = nan
r =
NaN NaN NaN NaN
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
NaN NaN NaN NaN
>> r(:, [1, end]) = nan
r =
NaN NaN NaN NaN
NaN 0.0975 0.9649 NaN
NaN 0.2785 0.1576 NaN
NaN NaN NaN NaN
更新:一般に、イメージはマトリックスであるため、質問は「特定のマトリックス値を設定する方法は?」です。答えは、「マトリックスのインデックスを使用する」です。これを行うには多くの方法があります (たとえば、インデックスのマトリックスを作成する、論理マスクを作成する、行/列の座標を使用するなど)。どの方法を使用するかは、通常、この特定のタスクの操作速度によって決まります。たとえば、ゼロを NaN に置き換える必要がある場合は、論理マスクを使用する方が高速です:r(r == 0) = nan
など。
于 2012-11-11T23:06:13.173 に答える
0
これでうまくいきますが、これは画像処理ツールボックスにあるような機能のようです。
mask = logical(ones(size(i)));
width = (m - 1) / 2;
mask(width + 1:size(i, 1) - width, width + 1:size(i, 2) - width) = 0;
i(mask) = NaN;
于 2012-11-12T15:08:01.930 に答える
0
最初NaN
に、マトリックス内の がどこにあるかを見つけます。イメージの名前が A であるとします。
a = isnan(A);
a
これにより、数値である場所で 0 の行列が作成され、 である場所で 1 が作成されますNaN
。次に、Nan
要素の場所を次のように見つけます。
[x,y]=find(a==1);
次に、それらを次のように値に置き換えますV
。
for i=1:length(x)
A(x(i),y(i)) = V;
end
于 2012-11-11T23:03:55.973 に答える