java-image-process.rar

  • PUDN用户
    了解作者
  • Java
    开发工具
  • 2.6MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 7
    下载次数
  • 2015-12-22 19:45
    上传日期
用Java编写的图像处理的小程序,效果不错
java-image-process.rar
内容介绍
/** * @ImageEnhance.java * @Version 1.0 2009.02.17 * @Author Xie-Hua Sun * */ package process.algorithms; import java.awt.image.ColorModel; import process.algorithms.imageTrans.FFT2; import process.algorithms.imageTrans.Complex; public class ImageEnhance { //对比度扩展====================================== //计算灰度映射表 public int[] pixelsMap(int x1,int y1,int x2,int y2) { int[] pMap = new int[256]; //映射表 if(x1 > 0) { double k1 = y1/x1; //第1段钭率k1 //按第1段钭率k1线性变换 for(int i = 0; i <= x1; i++) pMap[i] = (int)(k1*i); } double k2 = (y2-y1)/(x2-x1); //第2段钭率k2 //按第2段钭率k2线性变换 for(int i = x1+1; i <= x2; i++) if(x2 != x1) pMap[i] = y1 + (int)(k2*(i-x1)); else pMap[i] = y1; if(x2<255) { double k3 = (255-y2)/(255-x2);//第2段钭率k2 //按第3段钭率k3线性变换 for(int i = x2+1; i< 256; i++) pMap[i] = y2 + (int)(k3*(i-x2)); } return pMap; } //对比度扩展 public int[] stretch(int[] pix, int[] map, int iw, int ih) { ColorModel cm = ColorModel.getRGBdefault(); int r, g, b; for(int i = 0; i < iw*ih; i++) { r = map[cm.getRed(pix[i])]; g = map[cm.getGreen(pix[i])]; b = map[cm.getBlue(pix[i])]; if(r >= 255) r = 255; if(r < 0) r = 0; if(g >= 255) g = 255; if(g < 0) g = 0; if(b >= 255) b = 255; if(b < 0) b = 0; pix[i] = 255 << 24|r << 16|g << 8|b; } return pix; } //直方图均匀化================================== public int[] histequal(int[] pix, int[] hist, int iw, int ih) { double c = (double)255/(iw*ih); double[] sum = new double[256]; int[] outg = new int[256]; int g, area = 256*256; sum[0] = hist[0]; for(int i = 1; i < 256; i++) sum[i] = sum[i-1] + hist[i]; //灰度变换:i-->outg[i] for(int i = 0; i < 255; i++) outg[i] = (int)(c*sum[i]); for(int i = 0; i < iw*ih; i++) { g = pix[i]&0xff; pix[i] = 255 << 24|outg[g] <<16|outg[g] << 8|outg[g]; } return pix; } //滤波========================================= //3X3阈值滤波 public int[] threshold(int[] pix, int iw, int ih) { int[] opix = new int[iw*ih]; int avr, //灰度平均 sum, //灰度和 num = 0, //计数器 nT = 4, //计数器阈值 T = 10; //阈值 int pij, pkl, //(i,j),(i+k,j+l)处灰度值 err; //误差 for (int j = 1; j < ih - 1; j++) { for (int i = 1; i < iw - 1; i++) { //3X3块像素和 opix[i+j*iw] = pix[i+j*iw]; sum = 0; for (int k = -1; k < 2; k++) { for (int l = -1; l < 2; l++) { if ((k != 0) || (l != 0)) { pkl = pix[i+k+(j+l)*iw]&0xff; pij = pix[i+j*iw]&0xff; err = Math.abs(pkl - pij); sum = sum + pkl; if (err > T) num++; } } } int a = (int)(sum / 8.0f); //均值 if (num > nT) opix[i + j * iw] = 255 << 24|a << 16|a << 8|a; } } return opix; } //3X3均值滤波 public int[] average(int[] pix, int iw, int ih) { int[] opix = new int[iw*ih]; int a, pkl, sum; for (int j = 1; j < ih - 1; j++) { for (int i = 1; i < iw - 1; i++) { opix[i+j*iw] = pix[i+j*iw]; sum = 0; //3X3块像素和 for (int k = -1; k < 2; k++) for (int l = -1; l < 2; l++){ pkl = pix[i+k+(j+l)*iw]&0xff; sum = sum + pkl; } a = (int)(sum / 9.0f); //均值 opix[i + j * iw] = 255 << 24|a << 16|a << 8|a; } } return opix; } //中值滤波=================================== /************************************************** * type -- 0: 3X3窗口 * 1: 1X5窗口 * 2: 5X1窗口 * -- 3: 5X5窗口 **************************************************/ public int[] median(int[] pix, int iw, int ih, int type) { int[] opix = new int[iw*ih]; for (int j = 2; j < ih - 2; j++) { int[] dt; for (int i = 2; i < iw - 2; i++) { opix[i+j*iw] = pix[i+j*iw]; int m = 0, r = 0; if (type == 0) { dt = new int[9]; //3X3窗口 for (int k = -1; k < 2; k++) { for (int l = -1; l < 2; l++) { dt[m] = pix[i+k+(j+l)*iw]&0xff; m++; } } r = median_sorter(dt, 9); //中值 } else if (type == 1) { dt = new int[5]; //1X5窗口 dt[0] = pix[i+(j-2)*iw]&0xff; dt[1] = pix[i+(j-1)*iw]&0xff; dt[2] = pix[i+j*iw]&0xff; dt[3] = pix[i+(j+1)*iw]&0xff; dt[4] = pix[i+(j+2)*iw]&0xff; r = median_sorter(dt, 5); //中值 } else if (type == 2) { dt = new int[5]; //5X1窗口 dt[0] = pix[i-2+j*iw]&0xff; dt[1] = pix[i-1+j*iw]&0xff; dt[2] = pix[i+j*iw]&0xff; dt[3] = pix[i+1+j*iw]&0xff; dt[4] = pix[i+2+j*iw]&0xff; r = median_sorter(dt, 5); //中值 } else if (type == 3) { dt = new int[25]; //5X5窗口 for (int k = -2; k < 3; k++) { for (int l = -2; l < 3; l++) { dt[m] = pix[i+k+(j+l)*iw]&0xff; m++; } } r = median_sorter(dt, 25); //中值 } opix[i + j * iw] = 255 << 24|r << 16|r << 8|r; } } return opix; } //冒泡排序,输出中值 public int median_sorter(int[] dt, int m) { int tem; for (int k = m - 1; k >= 1; k--) for (int l = 1; l <= k; l++) if (dt[l - 1] > dt[l]) { tem = dt[l]; dt[l] = dt[l - 1]; dt[l - 1] = tem; } return dt[(int)(m / 2)]; } //模板滤波===================================== //3X3低通滤波方法 public int[] lowpass(int[] pix, int iw, int ih, int n) {
评论
    相关推荐
    • java二维码代码
      java编写好的二维码,包全有,只需运行com.jxx.qr中的zxingEncoder文件就行,就可以生成任意你想要的二维码
    • java调用vtk
      java写的调用vtk的简单demo,加载到eclipse中直接运行
    • java imageProcess 图像处理程序模板
      java imageProcess 图像处理程序模板,java imageProcess 图像处理程序模板
    • 比较方便且效果很好的java图片处理类代码 image_process_java_code.rar
      我找了很久,从国外网站上找到的,希望对其他人有用。
    • java 二维码
      java 二维码
    • java递归
      很有意思的,看起来象饶口令 <br>
    • java图像编程
      这是一个可直接运行的java文件。实现了图像编程。加高斯,椒盐噪声,滤波,fft变换,图像增强,边缘检测,直方图分析这些功能,代码框体、功能、工具类都是封装好的。有需要的可以下载学习下~
    • java_image_process_system:Java,数字图像处理,
      java_image_process_system:Java,数字图像处理,
    • DigitalImageProcess:接收图像文件并处理图像的程序(JAVA
      ##程序接收图像输入并处理图像(JAVA)######可执行文件位于ExecutableFiles文件夹中。 *运行画面 1个主屏幕 ![替代文字](截图/1.png) 2 打开图像文件 ![替代文字](截图/2.png) ![替代文字](截图/3.png) 3...
    • codesforimageprocessing.rar
      实现简单图像处理,包括256色转灰度图、Hough变换、Walsh变换、中值滤波、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘检测)、方块编码、梯度锐化、灰度均衡、直方图均衡、离散余弦变换、维纳滤波处理、逆滤波处理、阈值变换、高斯平滑。