このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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]);
入力引数
BW
— バイナリ イメージ
2 次元 logical 行列 | 2 次元数値行列
非線形近傍フィルタリング演算で変換するバイナリ イメージ。2 次元 logical 行列または 2 次元数値行列として指定します。数値入力の場合、非ゼロのピクセルは 1
(true
) であると見なされます。
lut
— 出力ピクセル値のルックアップ テーブル
16 要素ベクトル | 512 要素ベクトル
出力ピクセル値のルックアップ テーブル。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 列近傍のルックアップ
2 行 2 列近傍の場合、各近傍には 4 つのピクセルがあります。各バイナリ ピクセルには 2 つの取りうる状態があります。よって、順列の総数は 24 となり、ルックアップ テーブル lut
の長さは 16 となります。
bwlookup
は、(行, 列) 座標 (r,c) の位置にあるターゲット出力ピクセルの値を求めるため、左上のピクセルの座標が (r,c) である入力バイナリ イメージ BW
に含まれる 2 行 2 列ピクセル近傍を使用します。ルックアップ テーブル内のインデックス idx
は、近傍にある 4 つのピクセルの和を重み付けしたものに 1 を加算したものになります。
3 行 3 列近傍のルックアップ
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 = 4x4 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 = 2x2 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
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
bwlookup
では C コードの生成がサポートされています (MATLAB® Coder™ が必要)。汎用のMATLAB Host Computer
ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、bwlookup
によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細については、Image Processing Toolbox でサポートされているコード生成のタイプを参照してください。コードを生成する際、
logical
クラスの入力イメージを指定します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
コードを生成する際、
logical
クラスの入力イメージを指定します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
R2012b で導入R2022b: スレッドベース環境のサポート
bwlookup
は、スレッドベースの環境をサポートするようになりました。
参考
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)