ホームページ  >  記事  >  Java  >  Java イメージの腐食と拡張

Java イメージの腐食と拡張

黄舟
黄舟オリジナル
2016-12-30 11:42:151460ブラウズ

腐食: 構造要素 B を a によって移動した後、Ba が得られます。Ba が X に含まれる場合、この点 a を記録します。上記の条件を満たすすべての a 点の集合を、B による X の浸食の結果と呼びます。式で表すと、図のように E(X)={a|
Ba

X}=X

B

Java イメージの腐食と拡張

展開:腐食とその定義は次のとおりです。構造要素 B が a によって変換された後、Ba が X にヒットすると、この点 a を記録します。上記の条件を満たすすべての点 a の集合を、X を B で拡張した結果と呼びます。図に示すように、式は D(X)={a
| Ba↑X}=X

B と表されます。

Java イメージの腐食と拡張

詳細については、画像の拡張、腐食、および洗練を参照してください
原理を理解したので、実装コードを次に示します:
拡張:

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 つの操作は、黒い背景の白いテキストに対して実行されたことに注意してください。

元の絵と元の絵を拡張した結果:

Java イメージの腐食と拡張

Java イメージの腐食と拡張

その後、拡張に基づいて腐食します (元の絵の腐食は消えます...):

Java イメージの腐食と拡張

ダイアログの場合背景に黒い文字があります。 2 つの結果はまったく逆で、結果は次のとおりです:

Java イメージの腐食と拡張

上記は Java イメージの腐食と拡張の内容です。その他の関連コンテンツについては、注意してください。 PHP 中国語 Web サイト (www.php.cn) にアクセスしてください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。