- 浏览: 1273055 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (608)
- 数据结构 (2)
- AJAX (3)
- 设计模式 (3)
- java (117)
- js (14)
- css (9)
- jsp (10)
- 杂文 (49)
- htmlparser (6)
- 数据库 (29)
- 算法 (14)
- 数据挖掘 (11)
- 电脑杂症 (12)
- 网络爬虫 (7)
- 应用服务器 (9)
- PHP (2)
- C# (14)
- 测试 (3)
- WEB高性能开发 (3)
- swt (1)
- 搜索引擎 (16)
- HttpClient (4)
- Lite (1)
- EXT (1)
- python (1)
- lucene (4)
- sphinx (9)
- Xapian (0)
- linux (44)
- 问题归类 (1)
- Android (6)
- ubuntu (7)
- SEO (18)
- 数学 (0)
- 农业资讯 (12)
- 游戏 (3)
- nginx (1)
- TeamViewer (1)
- swing (1)
- Web前 端 (1)
- 主页 (0)
- 阿萨德发首发身份 (0)
- 软件设计师 (0)
- hibernate (5)
- spring3.0 (5)
- elastic (1)
- SSH (3)
- ff (0)
- oracle 10g (9)
- 神经网络 (1)
- struts2.0 (2)
- maven (1)
- nexus (1)
- 辅助工具 (3)
- Shiro (1)
- 联通项目 (0)
- 2014年专业选择 (0)
- freemarker (1)
- struts1.2 (8)
- adfasdfasfasf (0)
- TortoiseSVN (1)
- jstl (1)
- jquery (1)
- eclipse plugin (0)
- 游戏外挂 (1)
- 推广 (0)
- 按键精灵 (1)
- ibatis3.0 (1)
最新评论
-
水野哲也:
不不不, 这个您真错了!其实是你引用的那个jsp和本身的jsp ...
解析关于jsp页面指令冲突问题contentType="text/html;charset=UTF-8" -
caobo_cb:
import xx.cn.weibo.Util;
[ java版]新浪微博之ruquest_token篇 -
caobo_cb:
你好 Util包没有
[ java版]新浪微博之ruquest_token篇 -
小桔子:
你好!我遇到个问题 max_allowed_packet值总是 ...
mysql查询占用内存,优化的技巧 -
donghustone:
谢谢大神!
用JSmooth制作java jar文件的可执行exe文件教程(图文)
一 读取bmp图片数据 // 获取待检测图像 ,数据保存在数组 nData[],nB[] ,nG[] ,nR[]中 public void getBMPImage(String source) throws Exception { clearNData(); //清除数据保存区 FileInputStream fs = null; try { fs = new FileInputStream(source); int bfLen = 14; byte bf[] = new byte[bfLen]; fs.read(bf, 0, bfLen); // 读取14字节BMP文件头 int biLen = 40; byte bi[] = new byte[biLen]; fs.read(bi, 0, biLen); // 读取40字节BMP信息头 // 源图宽度 nWidth = (((int) bi[7] & 0xff) << 24) | (((int) bi[6] & 0xff) << 16) | (((int) bi[5] & 0xff) << 8) | (int) bi[4] & 0xff; // 源图高度 nHeight = (((int) bi[11] & 0xff) << 24) | (((int) bi[10] & 0xff) << 16) | (((int) bi[9] & 0xff) << 8) | (int) bi[8] & 0xff; // 位数 nBitCount = (((int) bi[15] & 0xff) << 8) | (int) bi[14] & 0xff; // 源图大小 int nSizeImage = (((int) bi[23] & 0xff) << 24) | (((int) bi[22] & 0xff) << 16) | (((int) bi[21] & 0xff) << 8) | (int) bi[20] & 0xff; // 对24位BMP进行解析 if (nBitCount == 24){ int nPad = (nSizeImage / nHeight) - nWidth * 3; nData = new int[nHeight * nWidth]; nB=new int[nHeight * nWidth]; nR=new int[nHeight * nWidth]; nG=new int[nHeight * nWidth]; byte bRGB[] = new byte[(nWidth + nPad) * 3 * nHeight]; fs.read(bRGB, 0, (nWidth + nPad) * 3 * nHeight); int nIndex = 0; for (int j = 0; j < nHeight; j++){ for (int i = 0; i < nWidth; i++) { nData[nWidth * (nHeight - j - 1) + i] = (255 & 0xff) << 24 | (((int) bRGB[nIndex + 2] & 0xff) << 16) | (((int) bRGB[nIndex + 1] & 0xff) << 8) | (int) bRGB[nIndex] & 0xff; nB[nWidth * (nHeight - j - 1) + i]=(int) bRGB[nIndex]& 0xff; nG[nWidth * (nHeight - j - 1) + i]=(int) bRGB[nIndex+1]& 0xff; nR[nWidth * (nHeight - j - 1) + i]=(int) bRGB[nIndex+2]& 0xff; nIndex += 3; } nIndex += nPad; } // Toolkit kit = Toolkit.getDefaultToolkit(); // image = kit.createImage(new MemoryImageSource(nWidth, nHeight, // nData, 0, nWidth)); /* //调试数据的读取 FileWriter fw = new FileWriter("C:\\Documents and Settings\\Administrator\\My Documents\\nDataRaw.txt");//创建新文件 PrintWriter out = new PrintWriter(fw); for(int j=0;j<nHeight;j++){ for(int i=0;i<nWidth;i++){ out.print((65536*256+nData[nWidth * (nHeight - j - 1) + i])+"_" +nR[nWidth * (nHeight - j - 1) + i]+"_" +nG[nWidth * (nHeight - j - 1) + i]+"_" +nB[nWidth * (nHeight - j - 1) + i]+" "); } out.println(""); } out.close(); */ } } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } finally { if (fs != null) { fs.close(); } } // return image; } 二 由r g b 获取灰度数组 public int[] getBrightnessData(int rData[],int gData[],int bData[]){ int brightnessData[]=new int[rData.length]; if(rData.length!=gData.length || rData.length!=bData.length || bData.length!=gData.length){ return brightnessData; } else { for(int i=0;i<bData.length;i++){ double temp=0.3*rData[i]+0.59*gData[i]+0.11*bData[i]; brightnessData[i]=(int)(temp)+((temp-(int)(temp))>0.5?1:0); } return brightnessData; } } 三 直方图均衡化 public int [] equilibrateGray(int[] PixelsGray,int width,int height) { int gray; int length=PixelsGray.length; int FrequenceGray[]=new int[length]; int SumGray[]=new int[256]; int ImageDestination[]=new int[length]; for(int i = 0; i <length ;i++) { gray=PixelsGray[i]; FrequenceGray[gray]++; } // 灰度均衡化 SumGray[0]=FrequenceGray[0]; for(int i=1;i<256;i++){ SumGray[i]=SumGray[i-1]+FrequenceGray[i]; } for(int i=0;i<256;i++) { SumGray[i]=(int)(SumGray[i]*255/length); } for(int i=0;i<height;i++) { for(int j=0;j<width;j++) { int k=i*width+j; ImageDestination[k]=0xFF000000 | ((SumGray[PixelsGray[k]]<< 16 ) | (SumGray[PixelsGray[k]]<< 8 ) | SumGray[PixelsGray[k]]); } } return ImageDestination; } 四 laplace2阶滤波,增强边缘,图像锐化 public int[] laplace2DFileter(int []data,int width,int height){ int filterData[]=new int[data.length]; int min=10000; int max=-10000; for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ if(i==0 || i==height-1 || j==0 || j==width-1) filterData[i*width+j]=data[i*width+j]; else filterData[i*width+j]=9*data[i*width+j]-data[i*width+j-1]-data[i*width+j+1] -data[(i-1)*width+j]-data[(i-1)*width+j-1]-data[(i-1)*width+j+1] -data[(i+1)*width+j]-data[(i+1)*width+j-1]-data[(i+1)*width+j+1]; if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } } // System.out.println("max: "+max); // System.out.println("min: "+min); for(int i=0;i<width*height;i++){ filterData[i]=(filterData[i]-min)*255/(max-min); } return filterData; } 五 laplace2阶增强滤波,增强边缘,增强系数delt public int[] laplaceHigh2DFileter(int []data,int width,int height,double delt){ int filterData[]=new int[data.length]; int min=10000; int max=-10000; for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ if(i==0 || i==height-1 || j==0 || j==width-1) filterData[i*width+j]=(int)((1+delt)*data[i*width+j]); else filterData[i*width+j]=(int)((9+delt)*data[i*width+j]-data[i*width+j-1])-data[i*width+j+1] -data[(i-1)*width+j]-data[(i-1)*width+j-1]-data[(i-1)*width+j+1] -data[(i+1)*width+j]-data[(i+1)*width+j-1]-data[(i+1)*width+j+1]; if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } } for(int i=0;i<width*height;i++){ filterData[i]=(filterData[i]-min)*255/(max-min); } return filterData; } 六 局部阈值处理2值化 // 局部阈值处理2值化,niblack's method /*原理: T(x,y)=m(x,y) + k*s(x,y) 取一个宽度为w的矩形框,(x,y)为这个框的中心。 统计框内数据,T(x,y)为阈值,m(x,y)为均值,s(x,y)为均方差,k为参数(推荐-2)计算出t再对(x,y)进行切割255/0。 这个算法的优点是 速度快,效果好。 缺点是 niblack's method会产生一定的噪声。 */ public int[] localThresholdProcess(int []data,int width,int height,int w,int h,double coefficients,double gate){ int[] processData=new int[data.length]; for(int i=0;i<data.length;i++){ processData[i]=255; } if(data.length!=width*height) return processData; int wNum=width/w; int hNum=height/h; int delt[]=new int[w*h]; //System.out.println("w; "+w+" h:"+h+" wNum:"+wNum+" hNum:"+hNum); for(int j=0;j<hNum;j++){ for(int i=0;i<wNum;i++){ //for(int j=0;j<1;j++){ // for(int i=0;i<1;i++){ for(int n=0;n<h;n++) for(int k=0;k<w;k++){ delt[n*w+k]=data[(j*h+n)*width+i*w+k]; //System.out.print("delt["+(n*w+k)+"]: "+delt[n*w+k]+" "); } //System.out.println(); /* for(int n=0;n<h;n++) for(int k=0;k<w;k++){ System.out.print("data["+((j*h+n)*width+i*w+k)+"]: "+data[(j*h+n)*width+i*w+k]+" "); } System.out.println(); */ delt=thresholdProcess(delt,w,h,coefficients,gate); for(int n=0;n<h;n++) for(int k=0;k<w;k++){ processData[(j*h+n)*width+i*w+k]=delt[n*w+k]; // System.out.print("delt["+(n*w+k)+"]: "+delt[n*w+k]+" "); } //System.out.println(); /* for(int n=0;n<h;n++) for(int k=0;k<w;k++){ System.out.print("processData["+((j*h+n)*width+i*w+k)+"]: "+processData[(j*h+n)*width+i*w+k]+" "); } System.out.println(); */ } } return processData; } 七 全局阈值处理2值化 public int[] thresholdProcess(int []data,int width,int height,double coefficients,double gate){ int [] processData=new int[data.length]; if(data.length!=width*height) return processData; else{ double sum=0; double average=0; double variance=0; double threshold; if( gate!=0){ threshold=gate; } else{ for(int i=0;i<width*height;i++){ sum+=data[i]; } average=sum/(width*height); for(int i=0;i<width*height;i++){ variance+=(data[i]-average)*(data[i]-average); } variance=Math.sqrt(variance); threshold=average-coefficients*variance; } for(int i=0;i<width*height;i++){ if(data[i]>threshold) processData[i]=255; else processData[i]=0; } return processData; } } 八 垂直边缘检测,sobel算子 public int[] verticleEdgeCheck(int []data,int width,int height,int sobelCoefficients) throws Exception{ int filterData[]=new int[data.length]; int min=10000; int max=-10000; if(data.length!=width*height) return filterData; try{ for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ if(i==0 || i==1 || i==height-1 || i==height-2 ||j==0 || j==1 || j==width-1 || j==width-2){ filterData[i*width+j]=data[i*width+j]; } else{ double average; //中心的九个像素点 //average=data[i*width+j]-Math.sqrt(2)*data[i*width+j-1]+Math.sqrt(2)*data[i*width+j+1] average=data[i*width+j]-sobelCoefficients*data[i*width+j-1]+sobelCoefficients*data[i*width+j+1] -data[(i-1)*width+j-1]+data[(i-1)*width+j+1] -data[(i+1)*width+j-1]+data[(i+1)*width+j+1]; filterData[i*width+j]=(int)(average); } if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } } for(int i=0;i<width*height;i++){ filterData[i]=(filterData[i]-min)*255/(max-min); } } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } return filterData; } 九 图像平滑:3*3掩模处理(平均处理),降低噪声 public int[] filter(int []data,int width,int height) throws Exception{ int filterData[]=new int[data.length]; int min=10000; int max=-10000; if(data.length!=width*height) return filterData; try{ for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ if(i==0 || i==1 || i==height-1 || i==height-2 ||j==0 || j==1 || j==width-1 || j==width-2){ filterData[i*width+j]=data[i*width+j]; } else{ double average; //中心的九个像素点 average=(data[i*width+j]+data[i*width+j-1]+data[i*width+j+1] +data[(i-1)*width+j]+data[(i-1)*width+j-1]+data[(i-1)*width+j+1] +data[(i+1)*width+j]+data[(i+1)*width+j-1]+data[(i+1)*width+j+1])/9; filterData[i*width+j]=(int)(average); } if(filterData[i*width+j]<min) min=filterData[i*width+j]; if(filterData[i*width+j]>max) max=filterData[i*width+j]; } } for(int i=0;i<width*height;i++){ filterData[i]=(filterData[i]-min)*255/(max-min); } } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } return filterData; }
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunny3106/archive/2007/07/08/1682813.aspx
发表评论
-
tomcat was unable to start within 45 seconds
2013-11-11 15:59 837原因一: -
Apache Commons Lang
2013-10-15 12:10 3165ArrayUtils public class Tes ... -
htmlunit form
2013-06-25 11:13 924Form提交 对于WEB应用,有着大量的表单,所以Html ... -
QQ微博登录步骤
2013-05-28 12:14 0QQ微博登录步骤: 1、验证帐号时,会访问一个地址。如下: ... -
jsoup
2013-05-22 23:37 1142import org.jsoup.Jsoup; import ... -
java 加密解密
2013-05-21 23:00 842import java.security.InvalidKey ... -
freemarket 对象应用篇(一)
2013-05-19 18:18 1042freemarket应用. 1.1:创建web工程testF ... -
中文数字转阿拉伯数字
2012-11-30 14:24 1795/** * @author loiy * ... -
标记:伪原创标题思路
2012-01-11 16:34 1287采用填词的办法进行伪 ... -
用JSmooth制作java jar文件的可执行exe文件教程(图文)
2012-01-05 01:09 8181下载完程序之后,运行 jsmoothgen.exe 1.进入“ ... -
多线程 Java.util.ConcurrentModificationException异常
2011-12-29 13:43 1525Iterator<Entry<String,B ... -
java 反序列化 抛出EOFException
2011-12-19 17:21 2253抛出这样的异常,一般情况下,是因为业务逻辑的问题。 如: 在没 ... -
一键安装双击运行——Java安装程序制作
2011-12-09 02:39 1330对于Java桌面应用来说,比较烦琐的就是安装部署问题,如:客户 ... -
只针对中英文混合分词的中文分词器
2011-12-02 17:28 4872该版本说明 1、只针对中英文混合分词 需要一些中文和英文连在 ... -
Java开源运行分析工具
2011-11-15 15:10 1884FProfiler FProfiler是一个非常快的Java ... -
cwss 按照指定的字符进行切词
2011-11-15 09:37 1213cwss 按照指定的字符进行切词 在 Utility.SEPE ... -
cwss bug 修复
2011-11-07 09:50 889修复的BUG有如下: 1、当只有中文、字母和数字,没有任何其他 ... -
java 怎么读取细胞词库scel
2011-10-24 14:28 3115private void sogou(String pa ... -
今天遇到一个奇怪的问题
2011-04-28 11:55 1186想实现一个用户访问页面,得到用户的外网地址 在公司上。程序是没 ... -
在myeclipse6.5下统一全部JSP编码更改
2011-04-07 14:47 1463在平时我们新建一个JSP页面默认编码是"ISO885 ...
相关推荐
本篇文档主要介绍如何使用Java语言来处理数字图像,特别是处理BMP格式的图像。以下是文档中提及的关键知识点: 1. BMP图像格式 BMP(Bitmap)是Windows操作系统中广泛使用的图像文件格式。它是一个无压缩的、...
以上这些基本操作构成了Java数字图像处理的基础。通过理解这些概念和技巧,开发者可以进一步探索更复杂的图像处理技术,如边缘检测、特征提取、图像分割等。在实际应用中,Java的`java.awt`和`java.awt.image`包提供...
在数字图像处理领域,Java语言由于其跨平台性、丰富的库支持和强大的性能,成为实现图像处理算法的常用工具。本资源"数字图像处理-Java语言算法描述.zip"包含了一系列关于如何使用Java来实现数字图像处理算法的详细...
这只是Java数字图像处理的基础,其他常见的算法还包括: 1. **图像显示**:使用Java AWT或Swing库中的`BufferedImage`类和`Graphics`对象来绘制图像。 2. **颜色空间转换**:例如从RGB到HSV,或者从灰度到彩色。 3....
Java作为一种跨平台、面向对象的编程语言,是实现数字图像处理的常用工具之一。本项目"数字图像处理java版源代码"正是为初学者提供了一个良好的学习平台,通过清晰的代码结构和模块化设计,帮助学习者理解并实践数字...
在数字图像处理领域,Java是一种常用的编程语言,用于开发各种图像处理算法和应用。本项目主要涉及了几个关键的图像处理技术,包括直方图均衡化、中值滤波、对数变换、模糊处理、锐化、旋转和平移。下面将详细解释...
在数字图像处理领域,Java是一种常用的编程语言,其丰富的库和强大的面向对象特性使得它非常适合进行复杂的图像操作。本项目涵盖了图像处理的多个关键方面,包括图像增强、图像复原、图像编码与压缩以及图像分割与...
一个基于Java技术的数字图像处理系统在稳定性和扩展性方面表现出色,通过使用Java技术开发,系统不仅能够提供实用的功能,而且能够方便地进行后期维护和功能扩展。特别是对于医学影像处理方面,该系统为后期的医学...
《数字图像处理:Java编程与实验》是一本深入探讨数字图像处理技术的书籍,结合了理论与实践,特别强调了使用Java语言进行编程和实验。在这个领域,掌握基础理论、算法实现以及应用实践是至关重要的。以下是关于这个...
Java数字图像处理基础是计算机视觉领域的一个重要分支,它涉及到图像的获取、分析、操作以及显示等技术。在这个领域,Java作为一个广泛使用的编程语言,提供了丰富的库和工具,使得开发者可以方便地进行图像处理工作...
3. **图像处理算法**:数字图像处理中常用的算法包括灰度化、二值化、边缘检测等,Java中可以通过循环遍历像素数据并应用数学运算来实现这些算法。 #### 五、总结 通过上述内容的学习,我们了解到Java环境下进行...
这个压缩包提供的“数字图像处理代码(内含完整的代码)”很可能包含了一系列用于处理图像的算法实现,这对于我们理解和实践图像处理技术至关重要。以下是根据标题、描述和标签推测的一些可能包含的知识点: 1. **...
在数字图像处理领域,JAVA是一种常用的编程语言,用于实现各种图像操作和分析。边缘检测和图像增强是两个关键的技术,它们对于图像的理解、分析和应用至关重要。本文将深入探讨这两个概念,以及它们在图像处理中的...
Java常用数值算法集是编程实践中不可或缺的一部分,它们涵盖了数学、统计学和计算机科学中的各种计算方法,用于解决实际问题。这些算法在处理数据、优化计算效率、模拟真实世界现象等方面发挥着重要作用。以下是一些...
在图像处理中,常用的锐化算法有拉普拉斯算子和Sobel算子。这些算子会检测像素间的梯度变化,从而突出图像的边缘。以下是一个使用Sobel算子进行锐化的Java实现: ```java public class Sharpen { public static ...
在IT领域,数字图像处理是一项重要的技术,广泛应用于医学影像、遥感、计算机视觉和多媒体等领域。本项目基于JAVA语言,涵盖了多个关键的图像处理技术,包括边缘检测、图像增强、图像分割、平滑和图像变换,且具有...
在数字图像处理中,我们通常使用编程语言如Python、C++或Java来实现算法。例如,Python的PIL库和OpenCV库是处理图像的常用工具,它们提供了丰富的函数来执行各种图像操作。理解编程基础,如变量、控制结构、函数和...
MATLAB是一款数学软件,广泛应用于工程计算、数据可视化、交互式算法开发等,同样适用于数字图像处理实验教学。MATLAB提供了一个交互式环境,内置了丰富的函数库和图像处理工具箱,这使得它在处理向量和矩阵时非常...