腐食: 構造要素 B を a によって移動した後、Ba が得られます。Ba が X に含まれる場合、この点 a を記録します。上記の条件を満たすすべての a 点の集合を、B による X の浸食の結果と呼びます。式で表すと、図のように E(X)={a|
Ba
X}=X
B
展開:腐食とその定義は次のとおりです。構造要素 B が a によって変換された後、Ba が X にヒットすると、この点 a を記録します。上記の条件を満たすすべての点 a の集合を、X を B で拡張した結果と呼びます。図に示すように、式は D(X)={a
| Ba↑X}=X
B と表されます。
詳細については、画像の拡張、腐食、および洗練を参照してください
原理を理解したので、実装コードを次に示します:
拡張:
public void Expand(int[][] mask){ IterBinary();//二值化 int mh = mask.length; int mw = mask[1].length; int sh = (mh+1)/2; int sw = (mw+1)/2; int[] d= new int[w*h]; for(int i=(mh-1)/2+1;i<h-(mh-1)/2;i++){ for(int j=(mw-1)/2+1;j<w-(mw-1)/2;j++){ int s = 0; for(int m=0; m<mh ; m++){ for(int n=0;n<mw;n++){ if(mask[m] *this.data[j+n-sw +(i+m-sh)*w] == 255) s = 255; } } d[j + i * w] = s; } } this.data = d; }
腐食:
public void Erosion(int[][] mask){ IterBinary();//二值化 int mh = mask.length; int mw = mask[1].length; int sh = (mh+1)/2; int sw = (mw+1)/2; int[] d= new int[w*h]; for(int i=(mh-1)/2+1;i<h-(mh-1)/2;i++){ for(int j=(mw-1)/2+1;j<w-(mw-1)/2;j++){ int s = 0; for(int m=0; m<mh ; m++){ for(int n=0;n<mw;n++){ if(mask[m] *255 == this.data[j+n-sw +(i+m-sh)*w]) s++; } } d[j + i * w] = (s==mh*mw)?255:0; } } this.data = d; }
このうち、マスクはテンプレートです、私たちは皆、3*3 オールワン行列をとります。これら 2 つの操作は、黒い背景の白いテキストに対して実行されたことに注意してください。
元の絵と元の絵を拡張した結果:
その後、拡張に基づいて腐食します (元の絵の腐食は消えます...):
ダイアログの場合背景に黒い文字があります。 2 つの結果はまったく逆で、結果は次のとおりです:
上記は Java イメージの腐食と拡張の内容です。その他の関連コンテンツについては、注意してください。 PHP 中国語 Web サイト (www.php.cn) にアクセスしてください。