2017-12-28 13 views
1

私はjavaのcannyフィルタプログラムを使って画像のエッジを検出しました。フィルタを適用した後 ...cannyでフィルタリングされた画像に白い色のピクセルを埋める方法は?

This is my imageズームイン場合...画像の画素の色差が Zoomed

あります。 すべてのエッジピクセルを純粋な白(#FFFFFF)にし、残りの部分を黒にします。 誰かが私が白の他の色合いを見つけて純粋な白で塗りつぶす方法を提案することができます。

注:上記のピクセルとは異なるピクセル(#F7F7F7)が異なる場合があります。上のズームした画像は単なる例です。

編集: 私は画像に反映するために、このコードを書いていた...コード内の誤りがある場合は

public void convert(){ 
    try{ 
     BufferedImage img = ImageIO.read(new File("input.jpg")); 
     int rgb; 
     int height = img.getHeight(); 
     int width = img.getWidth(); 
     File f = new File("newThreshold.jpg"); 
     Color white = new Color(255,255,255); 
     int wh = white.getRGB(); 

     for (int h = 0; h<height; h++){ 
      for (int w = 0; w<width; w++){ 

       rgb = img.getRGB(w, h); 
       red = (rgb & 0x00ff0000) >> 16; 
       green = (rgb & 0x0000ff00) >> 8; 
       blue = rgb & 0x000000ff; 
       if(red >= 200 || blue >= 200 || green >= 200){ 
        img.setRGB(w,h,wh); 
       } 
      } 
     } 

     ImageIO.write(img,"jpg",f); 
    } 
    catch(Exception e){ 
    } 
} 

誰も私を伝えることができます。 コードを実行しても、画像に変更はありません。 赤、緑、青の値が200以上であっても、画像は変化しません。

+1

あなたはこれが原因で、JPEG圧縮だけではありませんか? '.png'として保存してみてください。 – Obicere

+1

これはほぼ確実に圧縮によるものです。 [最小JPG圧縮可能なパターンとは何ですか?](https://dsp.stackexchange.com/questions/2010/what-is-the-least-jpg-compressible-pattern-camera-shooting-piece-of-cloth-スカ)。 JPEGは小さな細部を好きではないようです。 – Obicere

+0

ええ、私はそれをpngとして保存しました。ありがとうございました – DHS

答えて

0

イメージ内の各ピクセルを調べて、その値が純粋な白に設定されている場合、特定のしきい値を超えているかどうかを判断できます。必要に応じて、より暗い領域でも同じことを行うことができます。

例:

public Image thresholdWhite(Image in, int threshold) 
{ 
    Pixel[][] pixels = in.getPixels(); 
    for(int i = 0; i < pixels.length; ++i) 
    { 
     for(int j = 0; j < pixels[i].length; ++j) 
     { 
      byte red = pixels[i][j].getRed(); 
      byte green = pixels[i][j].getGreen(); 
      byte blue = pixels[i][j].getBlue(); 
      /* In case it isn't a grayscale image, if it is grayscale this if can be removed (the block is still needed though) */ 
      if(Math.abs(red - green) >= 16 && Math.abs(red - blue) >= 16 && Math.abs(blue- green) >= 16) 
      { 
       if(red >= threshold || blue >= threshold || green >= threshold) 
       { 
        pixels[i][j] = new Pixel(Colors.WHITE); 
       } 
      } 
     } 
    } 
    return new Image(pixels); 
} 
+0

スレッシュホールドを見つける方法を教えてください。イメージの各ピクセルのrgb値を見つけたらどうしたらよいでしょうか? – DHS

+0

@DHSしきい値は、すべての白いタイルをキャプチャする値です。私は240のようなものから始めます。RGB値を見つけたら、色を純粋な白または '0xFFFFFF'に変更するだけです。 –

関連する問題