⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 histogramretriever.java

📁 java编写的程序
💻 JAVA
字号:

import java.awt.image.*;

//直方图修正
public class HistogramRetriever extends PointProcessor
{
	//灰度出现的频数统计表,相当于灰度直方图
	int FrequenceGray[];
	
	//是否是灰色图像
	boolean isGrayImage = true;
	
	public HistogramRetriever()
	{
		this.type = this.PIXEL_GRAY_HISTOGRAM_EQUALIZE;
		
		FrequenceGray = new int[256];
	}
	
	//设置图像是灰色图像还是彩色图像,当为彩色图像时,设为false
	public void setImageProperty(boolean isGrayImage)
	{
		this.isGrayImage = isGrayImage;
	}
	

	public int[] obtainFrequencies(int[] pixels)
	{
		int nTotal = pixels.length;
		
		ColorModel colorModel = ColorModel.getRGBdefault();
		
		//像素循环:获取灰度频数统计表
		int frequencies[] = new int[256];
		for(int  i = 0; i < nTotal;i++)
		{
			int r,g,b,gray;
			
			if(this.isGrayImage)
			 	gray = colorModel.getRed(pixels[i]);
			else
			{
				r = colorModel.getRed(pixels[i]);
				g = colorModel.getGreen(pixels[i]);
				b = colorModel.getBlue(pixels[i]);
				gray = (r * 30 + g * 59 + b * 11) / 100;
			}
			
			frequencies[gray]++;
		}
		
		return (frequencies);

	}
	
	//亮度修正
	public boolean retrieveRGB(int[] src,int scansize,int[] dst)
	{
		if(scansize == 0)return false;
		int height = src.length / scansize;
		return (this.retrieveRGB(src,0,0,scansize,height,scansize,dst));
	}
	
	public boolean retrieveRGB(int[] src,int x,int y,int w,int h,int scansize,int[] dst)
	{
		if(scansize <= 0) return false;
		
		int nTotal = src.length;
		
	
		//原图像的宽度
		int srcWidth = scansize;
		int srcHeight = nTotal / scansize;	
		if((x > (scansize - 1)) || (y > (srcHeight - 1)))return false;

		int width = w;
		int height = h;

		if((x + w) > scansize)  width = scansize  - x;
		if((y + h) > srcHeight)  height = srcHeight  - y;

 		System.arraycopy(src,0,dst,0, nTotal);	
		ColorModel colorModel = ColorModel.getRGBdefault();

		//像素循环:获取灰度统计表,记录原图像的像素灰度
		int PixelsGray[] = new int[nTotal];

		int i = 0;int j = 0;
		for( i = 0; i < nTotal;i++)
		{
			int r,g,b,gray;
			
			if(this.isGrayImage)
			{
				gray = colorModel.getRed(src[i]);
				//gray = (gray < 0) ? 0 : ((gray > 255 ? 255 : gray);
			}
			else
			{
				r = colorModel.getRed(src[i]);
				g = colorModel.getGreen(src[i]);
				b = colorModel.getBlue(src[i]);
				gray = (r * 30 + g * 59 + b * 11) / 100;
			}
			PixelsGray[i] = gray;
			
			FrequenceGray[gray]++;
		}
		
		//	进行灰度均衡化
		int SumGray[] = new int[256];
		SumGray[0] = FrequenceGray[0];
		for(i = 1;i < 256;i++)
			SumGray[i] = SumGray[i- 1] + FrequenceGray[i];		
		for(i = 0;i < 256;i++)
			SumGray[i] = (int)((SumGray[i] / (float)nTotal) * 255);		
		for(i = 0; i < height;i++)
		{
			int indexBase = (y + i) * scansize;
 			for(j = 0;j < width;j++)
			{
				int index = indexBase + x + j;		
				int r,g,b;
				r = g = b = SumGray[PixelsGray[index]];			
				dst[index] = (0xFF000000 | (( r << 16 ) | ( g << 8 ) | b ));
			}
		}
		return true;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -