0

メンバーシップの程度=を持つmatlabピクセルの値を次のように設定するこの関数を作成しました。xy11

function c = core(x, y)
        tolerance = 0.01;
        pixels = [];
        index = 1;
        for i=1:length(y)
            for j=1:length(y)
                if abs(y(i,j)-1) <= tolerance
                x(i,j) = 1;
                pixels(index) = x(i,j);
                end
            end
            end
            c = pixels;
       end

スクリプトからこの関数を呼び出しているので、設定されたピクセルを戻すにはどうすればよい1ですか? または、基準に設定されたピクセルで元の画像を返す正しい方法は次のとおり1です。

Bur、続行する前に、基準を満たす画像内のピクセルが に設定されていることを確認できませんでした11ピクセルを修正するように設定するのは私のことではありませんか?

core要するに、 はメンバーシップ度が に等しいピクセルを表すと仮定しているということです1。そして、実装しようとしているアルゴリズムには、次の行があります。

C1 = core(F)

は画像を表しFます。

それに基づいて、これを に書く正しい方法は何ですかmatlab。はい、matlabこの行では次のように簡単に記述できます。

C.('C1') = core(x,y);

しかし、問題は、上記の情報に基づいて、呼び出しスクリプトに何が返され、どのように返されるのかということです。

そして、はい、出力として、私は常に入って1ansます。何故ですか?

ありがとう。

4

1 に答える 1

3

まず、関数の右側で渡すすべてのパラメーターは、関数のローカルパラメーターとして扱われ、外部で更新されることはありません。したがって、更新された画像を取得するには、左側に戻します。

次に、アルゴリズムにエラーがあります。

1-forループはすべての画像をスキャンしません。

2-index変数が更新されることはありません。

以下のこの関数は、あなたが望むものを達成するはずです:

function [x,pixels] = core(y)
    tolerance = 0.01;
    pixels = [];
    index = 1;
    for i=1:size(y,1)
        for j=1:size(y,2)
            index = j+i*size(y,2);
            if abs(y(i,j)-1) <= tolerance
            x(i,j) = 1;
            pixels = [pixels index];
            end
        end
    end
end

編集:

ループせずにこれを行うはるかに簡単な方法:

tolerance = 0.01;
x = zeros(size(y));
x((abs(y)-1) <= tolerance) = 1;
pixels = find(x==1);
于 2013-02-21T20:56:44.033 に答える