0

私はJavaとimageJが初めてです。既に 1 つの画像を読み込んでおり、imgprocと呼ばれる ImageProcessor を取得しています。そして、画像内に特徴を囲む境界/ボックスを見つけました。ちょうど背景の外側。この領域のピクセル マトリックスも見つかりました。現在、画像のこの領域のみを処理しようとしています。以前の既存のコード (メソッド) でそれを行うには、入力パラメーターを ImageProcessor にする必要があります。したがって、私の最初の考えは、 duplicate() メソッドを使用してimgprocのコピーを作成することです。そして、サイズ変更メソッドを使用して、以前に見つけたボックスのサイズに縮小します。しかし、これは機能しませんでした。表示する必要がある show image メソッドでテストしたためです。私が得たのは、縮小された黒い写真です。この最初の考えは、ここにコード化されています。

ImageProcessor Whiteimproc=imgproc.duplicate();
ImageProcessor BWhiteimproc=Whiteimproc.resize(BWhiteMatrix.length,BWhiteMatrix[0].length);
BWhiteimproc.setIntArray(BWhiteMatrix);
//the next three lines are going to show the image
Image ImagetoShow=BWhiteimproc.createImage();
Img ShowImg= new Img();
ShowImg.imgFrame(ImagetoShow,"BWhite");`

次に、ImagePlus を使用して、新しい ImageProcessor を作成しようとしました。そして、それはうまくいきました。以下に示すように:

ImagePlus imgWhite=IJ.createImage("white","jpg",BWhiteMatrix.length,BWhiteMatrix[0].length,1);
ImageProcessor BWhiteimproc=imgWhite.getProcessor();
BWhiteimproc.setIntArray(BWhiteMatrix);
//the next three lines are going to show the image
Image ImagetoShow=BWhiteimproc.createImage();
Img ShowImg= new Img();
ShowImg.imgFrame(ImagetoShow,"BWhite");

それがなぜなのか、誰かが私を助けてくれますか?そして、ImageProcessor を使用して ImageProcessor クラスの新しいオブジェクトを定義できなかった理由を知っています。

ありがとう

4

1 に答える 1

1

よくわかりませんが、ImageProcessor のタイプが 2 番目のアプローチのものと異なるため、最初のアプローチは機能しない可能性があります。で ImageProcessors のランタイム タイプを確認してみてくださいBWhiteimproc.getClass().getName()

ImageProcessor#setIntArray(int[][])さまざまなタイプの画像に対してさまざまなことを行います。32 ビット画像Float.intBitsToFloat(int)の場合、int 値が 100 の場合、保存される float 値は +0e100 (float の最後の 8 ビットは指数) になり、ゼロになります。8 ビットおよび 16 ビットのイメージの場合、int を精度の低い型 (byte および short) にキャストします。

そして、ImageProcessor を使用して ImageProcessor クラスの新しいオブジェクトを定義できなかった理由を知っています。

ImageProcessor は抽象クラスです。抽象クラスのインスタンスは作成できません。代わりにサブクラスの 1 つを使用します。

  • 8 ビット グレースケール イメージの ByteProcessor
  • 16 ビット グレースケール イメージ用の ShortProcessor
  • 32 ビット浮動小数点グレースケール イメージの FloatProcessor
  • RGB 画像の ColorProcessor
于 2013-07-31T09:06:28.417 に答える