Java SwingとJAIを使ってnetbeansプラットフォームでアプリケーションを作っています。これで私は画像処理をしたい。私はX線銃を使って.tiff白黒画像をキャプチャします。その後、私はその白黒画像のヒストグラムをプロットしたい。ヒストグラムをプロットするには、まず灰色または白黒の画像ピクセル値を取得する必要があります。このピクセル値を使ってヒストグラムをプロットすることができます。白黒画像のこのピクセル値はどのように取得できますか?白黒画像のピクセル値を取得する方法は?
4
A
答えて
4
これは、java.awt.image.BufferedImageを使用する場合に有効です。
ヒストグラムを作成したいので、すべてのピクセルをループするとします。単一のピクセル値を返す方法があります。あなたは、配列、使用を取得すると
int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
は:
int alpha = (pixels[i] >> 24) & 0x000000FF;
int red = (pixels[i] >> 16) & 0x000000FF;
int green = (pixels[i] >>8) & 0x000000FF;
int blue = pixels[i] & 0x000000FF;
を抽出するにはループが行われるので、
int getRGB(int x, int y)
しかし、私はあなたがこのいずれかを使用したいと思い仮定しますチャンネルデータ。変数がバイトとして宣言できるかどうかはわかりません(バイトが符号付きであり、2の補数形式で異なる算術演算が行われますが、配列の整数の1バイトのみを使用していますが、shortとして宣言できます)。
次に例えば、これらの値にいくつかの数学をプリフォーム:
int average = (red + green + blue)/3;
これは、あなたが簡単な輝度ヒストグラムで使用できるポイントを与えて、画素ごとに平均値を返します。
EDIT:ヒストグラム作成について
、私はこのクラスを使用しています。ヒストグラムを引数として使用したい画像をsetImage(BufferedImage image)
メソッドに渡します。アレイの入力にはupdateHistogram()
を使用してください。図面データはpaintComponent(Graphics g)
です。私は認めなければならない、特にオフセットを計算するときには、それはややこしいですが、簡単に簡単にすることができます。ここで
がクラス全体である:
class HistogramCtrl extends JComponent
{
BufferedImage m_image;
int[] m_histogramArray = new int[256]; //What drives our histogram
int m_maximumPixels;
public HistogramCtrl(){
m_maximumPixels = 0;
for(short i = 0; i<256; i++){
m_histogramArray[i] = 0;
}
}
void setImage(BufferedImage image){
m_image = image;
updateHistogram();
repaint();
}
void updateHistogram(){
if(m_image == null) return;
int[] pixels = m_image.getRGB(0, 0, m_image.getWidth(), m_image.getHeight(), null, 0, m_image.getWidth());
short currentValue = 0;
int red,green,blue;
for(int i = 0; i<pixels.length; i++){
red = (pixels[i] >> 16) & 0x000000FF;
green = (pixels[i] >>8) & 0x000000FF;
blue = pixels[i] & 0x000000FF;
currentValue = (short)((red + green + blue)/3); //Current value gives the average //Disregard the alpha
assert(currentValue >= 0 && currentValue <= 255); //Something is awfully wrong if this goes off...
m_histogramArray[currentValue] += 1; //Increment the specific value of the array
}
m_maximumPixels = 0; //We need to have their number in order to scale the histogram properly
for(int i = 0; i < m_histogramArray.length;i++){ //Loop through the elements
if(m_histogramArray[i] > m_maximumPixels){ //And find the bigges value
m_maximumPixels = m_histogramArray[i];
}
}
}
protected void paintComponent(Graphics g){
assert(m_maximumPixels != 0);
Rectangle rect = g.getClipBounds();
Color oldColor = g.getColor();
g.setColor(new Color(210,210,210));
g.fillRect((int)rect.getX(), (int)rect.getY(), (int)rect.getWidth(), (int)rect.getHeight());
g.setColor(oldColor);
String zero = "0";
String thff = "255";
final short ctrlWidth = (short)rect.getWidth();
final short ctrlHeight = (short)rect.getHeight();
final short activeWidth = 256;
final short activeHeight = 200;
final short widthSpacing = (short)((ctrlWidth - activeWidth)/2);
final short heightSpacing = (short)((ctrlHeight - activeHeight)/2);
Point startingPoint = new Point();
final int substraction = -1;
startingPoint.x = widthSpacing-substraction;
startingPoint.y = heightSpacing+activeHeight-substraction;
g.drawString(zero,widthSpacing-substraction - 2,heightSpacing+activeHeight-substraction + 15);
g.drawString(thff,widthSpacing+activeWidth-substraction-12,heightSpacing+activeHeight-substraction + 15);
g.drawLine(startingPoint.x, startingPoint.y, widthSpacing+activeWidth-substraction, heightSpacing+activeHeight-substraction);
g.drawLine(startingPoint.x,startingPoint.y,startingPoint.x,heightSpacing-substraction);
double factorHeight = (double)activeHeight/m_maximumPixels; //The height divided by the number of pixels is the factor of multiplication for the other dots
Point usingPoint = new Point(startingPoint.x,startingPoint.y);
usingPoint.x+=2; //I want to move this two points in order to be able to draw the pixels with value 0 a bit away from the limit
Point tempPoint = new Point();
for(short i = 0; i<256; i++){
tempPoint.x = usingPoint.x;
tempPoint.y = (int)((heightSpacing+activeHeight-substraction) - (m_histogramArray[i] * factorHeight));
if((i!=0 && (i % 20 == 0)) || i == 255){
oldColor = g.getColor();
g.setColor(oldColor.brighter());
//Draw horizontal ruler sections
tempPoint.x = widthSpacing + i;
tempPoint.y = heightSpacing+activeHeight-substraction+4;
g.drawLine(tempPoint.x,tempPoint.y,widthSpacing + i,heightSpacing+activeHeight-substraction-4);
if(i <= 200){
//Draw vertical ruler sections
tempPoint.x = widthSpacing - substraction - 3;
tempPoint.y = heightSpacing+activeHeight-substraction-i;
g.drawLine(tempPoint.x,tempPoint.y,widthSpacing - substraction + 4, heightSpacing+activeHeight-substraction-i);
}
tempPoint.x = usingPoint.x;
tempPoint.y = usingPoint.y;
g.setColor(oldColor);
}
g.drawLine(usingPoint.x, usingPoint.y, tempPoint.x, tempPoint.y);
usingPoint.x++; //Set this to the next point
}
}
}
関連する問題
- 1. Javaで白黒画像のピクセル値を取得する方法
- 2. Python PIL - 白黒ピクセルのRGBピクセル値
- 3. 白黒画像のスケーリング
- 4. Androidでカラー画像を白黒にする方法
- 5. 白黒画像文書クラスタリング
- 6. 画像のピクセル値を読み取る
- 7. JavaのTIFF画像のピクセル値を取得する
- 8. 画像OpenCVのピクセルのHSV値を取得する
- 9. matlabで黒のピクセルを白にする
- 10. 画像からピクセル値を得る:Matlab
- 11. iPhone SDKの画像を白黒画像に変換する
- 12. ピクセルを白黒に変換する
- 13. MATLABで画像のピクセル値を表示する方法は?
- 14. 画像からピクセルのx、y座標の色を取得する方法は?
- 15. OpenCV Mat画像を白黒のエラー
- 16. 白いCSSの背景に黒いテキストと画像をオーバーレイする方法は?
- 17. OpenCV(C++) - カラー画像の白黒変換
- 18. PDF/A-1a:白黒画像のOutputIntents
- 19. 白黒画像を白と透明に変換する
- 20. 画像の黒いピクセル数をカウントする
- 21. モノクロ(白黒)画像のみのカメラを設定するには?
- 22. ピクセル強度値マトリックスの取得方法
- 23. 画像のリストをPythonで白黒に変換する最も良い方法
- 24. 画像の白黒バージョンを自動的に生成する方法
- 25. CSSの白黒から黒への画像の切り替え
- 26. MATLAB:RGBから白黒画像へ
- 27. CGImageRefオブジェクトからピクセルのRGB値を取得する方法は?
- 28. 第2の同じ場所に配置された画像上で黒でもある場合、最初の画像の黒のピクセルを白に変えます。
- 29. キャンバスのない画像のピクセルを読み取る方法
- 30. opencv python BGR画像領域にマスク領域(黒または白のピクセル)をコピーする
私はすでにそれを試してみましたが、それは正確な答えはなかったです。 – Jay
ヒストグラムの作成/描画に助けが必要ですか? –
はい。私はヒストグラムをプロットしたい。 – Jay