如何使用JAI库在java中实现直方图的规范化和均衡化?
我正在使用Swing组件和JAI库用java制作应用程序。我制作黑白或灰度图像的直方图。这种制作直方图的方法正确吗?如果它是正确的,那么我如何在java应用程序中使用JAI库实现直方图的标准化和均衡化?我的代码如下。在我的代码中,我创建BuffereImage对象,然后创建并绘制该图像的直方图。如何使用JAI库在java中实现直方图的规范化和均衡化?,java,histogram,jai,normalize,Java,Histogram,Jai,Normalize,我正在使用Swing组件和JAI库用java制作应用程序。我制作黑白或灰度图像的直方图。这种制作直方图的方法正确吗?如果它是正确的,那么我如何在java应用程序中使用JAI库实现直方图的标准化和均衡化?我的代码如下。在我的代码中,我创建BuffereImage对象,然后创建并绘制该图像的直方图。 在此处输入代码 import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedIm
在此处输入代码
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.*;
public class FinalHistogram extends JPanel {
static int[] bins = new int[256];
static int[] newBins = new int[256];
static int x1 = 0, y1 = 0;
static PlanarImage image = JAI.create("fileload", "alp_finger.tiff");
static BufferedImage bi = image.getAsBufferedImage();
FinalHistogram(int[] pbins) {
for (int i = 0; i < 256; i++) {
bins[i] = pbins[i];
newBins[i] = 0;
}
repaint();
}
@Override
protected void paintComponent(Graphics g) {
for (int i = 0; i < 256; i++) {
g.drawLine(150 + i, 300, 150 + i, 300 - (bins[i] / 300));
if (i == 0 || i == 255) {
String sr = new Integer((i)).toString();
g.drawString(sr, 150 + i, 305);
}
System.out.println("bin[" + i + "]===" + bins[i]);
}
}
public static void main(String[] args) throws IOException {
int[] sbins = new int[256];
int pixel = 0;
int k = 0;
for (int x = 0; x < bi.getWidth(); x++) {
for (int y = 0; y < bi.getHeight(); y++) {
pixel = bi.getRaster().getSample(x, y, 0);
k = (int) (pixel / 256);
sbins[k]++;
//pixel = bi.getRGB(x, y) & 0x000000ff;
//k=pixel;
//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
//}
}
}
JTabbedPane jtp = new JTabbedPane();
jtp.addTab("Histogram", new JScrollPane(new FinalHistogram(sbins)));
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.add(new JScrollPane(jtp));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.image.buffereImage;
导入java.io.IOException;
导入javax.media.jai.jai;
导入javax.media.jai.PlanarImage;
导入javax.swing.*;
公共类最终直方图扩展JPanel{
静态int[]bin=新int[256];
静态int[]newBins=newint[256];
静态int x1=0,y1=0;
静态平面图像=JAI.create(“fileload”,“alp_finger.tiff”);
静态BuffereImage bi=image.getasBuffereImage();
最终示波图(int[]pbins){
对于(int i=0;i<256;i++){
垃圾箱[i]=垃圾箱[i];
纽宾斯[i]=0;
}
重新油漆();
}
@凌驾
受保护组件(图形g){
对于(int i=0;i<256;i++){
g、 抽绳(150+i、300、150+i、300-(箱[i]/300));
如果(i==0 | | i==255){
字符串sr=新整数((i)).toString();
g、 抽绳(sr,150+i,305);
}
System.out.println(“bin[“+i+”]=”+bin[i]);
}
}
公共静态void main(字符串[]args)引发IOException{
int[]sbins=新int[256];
整数像素=0;
int k=0;
对于(int x=0;x16)&0x000000FF;
//绿色=(像素[i]>>8)&0x000000FF;
//蓝色=像素[i]&0x000000FF;
//currentValue=(短)((红色+绿色+蓝色)/3);//当前值给出平均值//忽略alpha
//断言(currentValue>=0&¤tValue)