bwlookup
ルックアップ テーブルを使用した非線形フィルター処理
説明
例
BW の 2 行 2 列の近傍で 4 つのピクセルすべてが 1 に設定されているときにのみ、入力イメージ内のターゲットとなるピクセル位置に 1 が配置されるようなフィルタリング演算により、ルックアップ テーブル lut を作成します。
lutfun = @(x)(sum(x(:))==4); lut = makelut(lutfun,2);
バイナリ イメージを読み込みます。
BW1 = imread("text.png");16 要素のベクトル lut を使用して 2 行 2 列の近傍処理を実行します。
BW2 = bwlookup(BW1,lut);
元のイメージと収縮後のイメージを表示します。
h1 = subplot(1,2,1); imshow(BW1); title("Original Image") h2 = subplot(1,2,2); imshow(BW2); title("Eroded Image")

ズームインしてテキストの収縮効果を確認します。
set(h1,Ylim=[1 64],Xlim=[1 64]); set(h2,Ylim=[1 64],Xlim=[1 64]);

入力引数
非線形近傍フィルタリング演算で変換するバイナリ イメージ。2 次元 logical 行列または 2 次元数値行列として指定します。数値入力の場合、非ゼロのピクセルは 1 (true) であると見なされます。
出力ピクセル値のルックアップ テーブル。16 要素または 512 要素のベクトルとして指定します。lut のサイズにより、2 つの近傍処理のうちのどちらを実行するかが決まります。ルックアップ テーブルは関数 makelut を使用して作成できます。
lutに 16 個のデータ要素が含まれていれば、近傍行列は 2 行 2 列です。lutに 512 個のデータ要素が含まれていれば、近傍行列は 3 行 3 列です。
出力引数
アルゴリズム
関数 bwlookup は、以下のステップを実行し、処理されたイメージ A に含まれる各ピクセルの値を判定します。
A内のターゲット ピクセルの座標に基づいて、入力イメージBW内のピクセル近傍の位置を特定します。近傍がBWのエッジを超えて広がっている場合、この関数は、イメージBWの境界ピクセルをゼロ パディングします。近傍のバイナリ ピクセル パターンに基づいて、インデックス
idxを計算します。A内のターゲット ピクセルを、ルックアップ テーブルのインデックスidxの位置にある値 (つまり、lut(idx)の値) として設定します。
このアルゴリズムの各ステップを示す例については、サンプル ピクセルのルックアップ値を参照してください。
2 行 2 列近傍の場合、各近傍には 4 つのピクセルがあります。各バイナリ ピクセルには 2 つの取りうる状態があります。よって、順列の総数は 24 となり、ルックアップ テーブル lut の長さは 16 となります。
bwlookup は、(行, 列) 座標 (r,c) の位置にあるターゲット出力ピクセルの値を求めるため、左上のピクセルの座標が (r,c) である入力バイナリ イメージ BW に含まれる 2 行 2 列ピクセル近傍を使用します。ルックアップ テーブル内のインデックス idx は、近傍にある 4 つのピクセルの和を重み付けしたものに 1 を加算したものになります。

3 行 3 列近傍の場合、各近傍には 9 つのピクセルがあります。各バイナリ ピクセルには 2 つの取りうる状態があります。よって、順列の総数は 29 となり、ルックアップ テーブル lut の長さは 256 となります。
bwlookup は、(行, 列) 座標 (r,c) の位置にあるターゲット出力ピクセルの値を求めるため、座標 (r,c) を中心とする入力バイナリ イメージ BW に含まれる 3 行 3 列ピクセル近傍を使用します。ルックアップ テーブル内のインデックス idx は、近傍にある 9 つのピクセルの和を重み付けしたものに 1 を加算したものになります。

この例では、ピクセルの 2 行 2 列近傍に基づいて、ルックアップ テーブル内でターゲット ピクセルに対応するインデックスを求める方法を示します。
ランダムな 16 要素ルックアップ テーブルを作成します。結果を再現できるように、乱数シードを設定します。
rng("default")
lut = randperm(16)lut = 1×16
6 3 16 11 7 14 8 5 15 1 2 4 13 9 10 12
小さいサンプル バイナリ イメージを作成します。
BW = checkerboard(2,1,1)>0.5
BW = 4×4 logical array
0 0 1 1
0 0 1 1
1 1 0 0
1 1 0 0
この例では、ターゲットとなるピクセル位置が BW(2,1) であると仮定します。ターゲット ピクセルの 2 行 2 列近傍を求めます。
targetRow = 2; targetColumn = 1; neighborhood = BW(targetRow:targetRow+1,targetColumn:targetColumn+1)
neighborhood = 2×2 logical array
0 0
1 1
ルックアップ テーブル内のインデックスを計算します。
idx = 1 + 1*neighborhood(1,1) + 2*neighborhood(2,1) ...
+ 4*neighborhood(1,2) + 8*neighborhood(2,2)idx = 11
または、近傍をバイナリ string として表し、関数 bin2dec を使用してその string をインデックスに変換することもできます。(2,2)、(2,1)、(1,2)、(1,1) の順に近傍の値をリストして string を作成します。言い換えると、string で最初に現れる値 neighborhood(2,2) が最上位ビットに寄与します。string で最後に現れる値 neighborhood(1,1) が最下位ビットに寄与します。
binStr = "1 0 1 0";
idx = 1 + bin2dec(binStr)idx = 11
ルックアップ テーブル内でインデックス idx の位置にある値を求め、ターゲット ピクセルの値を計算します。
targetPixelValue = lut(idx)
targetPixelValue = 2
上記の計算では、出力イメージ A のターゲット位置 A(2,1) に値 2 があることが予測されています。元のバイナリ イメージ BW に対して 2 行 2 列の非線形近傍フィルタリング演算を実行し、この予測を確認します。
A = bwlookup(BW,lut)
A = 4×4
6 13 12 11
2 8 14 3
12 11 6 6
14 3 6 6
拡張機能
使用上の注意および制限:
bwlookupでは C コードの生成がサポートされています (MATLAB® Coder™ が必要)。汎用のMATLAB Host Computerターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、bwlookupによって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細については、Image Processing Toolbox でサポートされているコード生成のタイプを参照してください。コードを生成する際、
logicalクラスの入力イメージを指定します。
使用上の注意および制限:
コードを生成する際、
logicalクラスの入力イメージを指定します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
R2012b で導入bwlookup は、スレッドベースの環境をサポートするようになりました。
参考
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)