1

MATLAB の画像にスライディング ウィンドウ操作を適用した後、境界ピクセル (パディングを使用して計算されたピクセル) を設定して、それらを意味のないものとしてマークしstdfilt(i, ones(5, 5))たいと思います。NaNこの例では、最も外側の 2 つの行と列を に設定しますNaN。M * M ウィンドウが与えられた場合、(M - 1) / 2 ピクセル幅の境界線を特定の値に設定するにはどうすればよいですか?

4

3 に答える 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 に答える