赤、緑、青の各要素を処理してエッジ マップ (白黒形式のバイナリ イメージ) を取得し、それらを 1 つにして出力を表示する必要があるイメージ検出を行っています。赤、緑、青のそれぞれの要素を抽出し、しきい値を設定してバイナリ イメージを取得した後、バイナリ イメージが表示されません。代わりに、グレースケールの画像が表示されます。誰か私を助けてくれませんか?これまでの私のコードは次のとおりです。
Buffered Image buff_red;
int[] process_red;
int width = 256;
int height = 256;
private void processActionPerformed(java.awt.event.ActionEvent evt) {
width = inputimage.getWidth(null);
height = inputimage.getHeight(null);
buff_red = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics r = buff_red.getGraphics();
r.drawImage(inputimage, 0, 0, null);
r.dispose();
//get the red element
process_red = new int[width * height];
counter = 0;
for(int i = 0; i < 256; i++) {
for(int j = 0; j < 256; j++) {
int clr = buff_red.getRGB(j, i);
int red = (clr & 0x00ff0000) >> 16;
red = (0xFF<<24)|(red<<16)|(red<<8)|red;
process_red[counter] = red;
counter++;
}
}
//set threshold value for red element
int threshold = 100;
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int bin = (buff_red.getRGB(x, y) & 0x000000ff);
if (bin < threshold)
bin = 0;
else
bin = 255;
buff_red.setRGB(x,y, 0xff000000 | bin << 16 | bin << 8 | bin);
}
}
アップデート:
の初期化はbuff_red
、次の「get red element」(最初のループ) の前に行われました。
buff_red = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics r = buff_red.getGraphics();
r.drawImage(inputimage, 0, 0, null);
process_red
エッジマップを取得できるように、画像をバッファリングしてしきい値処理に使用する必要がありますか?