JAVA图像处理实例

合集下载

Java中的图形图像处理和特征提取

Java中的图形图像处理和特征提取

Java中的图形图像处理和特征提取图形图像处理和特征提取是Java编程中的重要领域,它们在计算机视觉、图像识别、模式识别等应用领域中起着关键作用。

本文将介绍Java中的图形图像处理和特征提取的基本概念、常用算法和相关工具。

一、图形图像处理图形图像处理是指对图像进行改变、增强、重建等操作的一系列技术方法。

在Java中,图形图像处理通常涉及图像的读取、保存、调整、滤波、变换、合并等操作。

下面我们将介绍几种常见的图形图像处理技术及其在Java中的实现方式。

1.图像读取与保存:Java中可以使用ImageIO类来读取和保存图像文件。

例如,可以使用以下代码读取一张图片:```BufferedImage img = ImageIO.read(new File("image.jpg"));```然后可以使用以下代码将图像保存到文件中:```ImageIO.write(img, "jpg", new File("output.jpg"));```2.图像调整:图像的调整包括亮度、对比度、饱和度等的调整。

Java中可以使用RescaleOp类来实现图像的调整。

例如,以下代码将图像的亮度调整为原来的两倍:```float scaleFactor = 2.0f;RescaleOp op = new RescaleOp(scaleFactor, 0, null);BufferedImage adjustedImg = op.filter(img, null);```3.图像滤波:图像滤波是对图像进行模糊、锐化、边缘检测等操作。

Java中可以使用ConvolveOp类来实现图像的滤波。

例如,以下代码使用一个3x3的均值滤波器对图像进行模糊处理:```float[] matrix = { 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f,1/9f, 1/9f, 1/9f };ConvolveOp op = new ConvolveOp(new Kernel(3, 3, matrix));BufferedImage filteredImg = op.filter(img, null);```4.图像变换:图像变换是对图像进行旋转、缩放、翻转等操作。

java floyd-steinberg抖动算法 -回复

java floyd-steinberg抖动算法 -回复

java floyd-steinberg抖动算法-回复Java Floyd-Steinberg抖动算法是一种用于图像处理的算法,特别用于在有限的颜色空间中生成更真实的图像。

该算法通过将误差从当前像素传播到邻近像素,从而逐渐减小颜色的差异。

本文将逐步回答有关Java Floyd-Steinberg抖动算法的问题,介绍其原理、实现步骤和示例代码。

第一步:算法的原理是什么?Java Floyd-Steinberg抖动算法是一种误差扩散(dithering)算法,用于在像素级别上减小颜色差。

其原理是对于当前像素,将其颜色值与最接近的颜色匹配,然后将误差分配给邻近像素。

这样,逐渐减小了颜色差异,使生成的图像更接近原始图像。

第二步:如何实现Java Floyd-Steinberg抖动算法?为了实现Java Floyd-Steinberg抖动算法,我们需要以下步骤:1. 读取待处理的图像。

2. 将图像从RGB颜色空间转换到灰度颜色空间。

3. 遍历每个像素,将其灰度值与最接近的颜色匹配。

4. 计算当前像素与离散颜色的差异,并将这个差异传播到邻近像素。

5. 调整每个像素的颜色值,将其限制在离散颜色空间中。

6. 保存处理后的图像。

第三步:具体的实现步骤是什么?下面是具体的Java代码实现Java Floyd-Steinberg抖动算法的步骤:javaimport java.awt.*;import java.awt.image.BufferedImage;public class FloydSteinbergDithering {public static void main(String[] args) {BufferedImage image = readImage("input.png"); 读取待处理的图像int[][] grayscale = convertToGrayscale(image); 将图像转换为灰度颜色空间int width = grayscale.length;int height = grayscale[0].length;for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {int oldPixel = grayscale[x][y];int newPixel = findClosestColor(oldPixel); 查找最接近的颜色grayscale[x][y] = newPixel;int error = oldPixel - newPixel;if (x + 1 < width) {grayscale[x + 1][y] += (int) (error * 7 / 16.0); 传播误差到右边像素}if (x - 1 >= 0 && y + 1 < height) {grayscale[x - 1][y + 1] += (int) (error * 3 / 16.0); 传播误差到左下角像素}if (y + 1 < height) {grayscale[x][y + 1] += (int) (error * 5 / 16.0); 传播误差到下方像素}if (x + 1 < width && y + 1 < height) {grayscale[x + 1][y + 1] += (int) (error * 1 / 16.0); 传播误差到右下角像素}}}BufferedImage ditheredImage =convertToImage(grayscale); 将处理后的图像转换为BufferedImage saveImage(ditheredImage, "output.png"); 保存处理后的图像}private static BufferedImage readImage(String path) { ... } 读取图像的实现private static int[][] convertToGrayscale(BufferedImage image) { ... } 转换为灰度图像的实现private static int findClosestColor(int color) { ... } 查找最接近的颜色的实现private static BufferedImage convertToImage(int[][] grayscale) { ... } 转换为BufferedImage的实现private static void saveImage(BufferedImage image, String path) { ... } 保存图像的实现}第四步:Java Floyd-Steinberg抖动算法的示例代码是什么?下面是一个简单示例的Java Floyd-Steinberg抖动算法的实现代码,代码通过读取名为"input.png"的图像,将其转换为灰度图像,并使用Floyd-Steinberg算法进行抖动处理,最终将结果保存为"output.png"。

利用Java开发医疗影像处理系统的设计与实现

利用Java开发医疗影像处理系统的设计与实现

利用Java开发医疗影像处理系统的设计与实现一、引言随着医疗技术的不断发展,影像处理在医疗领域中扮演着越来越重要的角色。

医疗影像处理系统可以帮助医生更准确地诊断疾病,提高医疗效率,改善患者治疗体验。

本文将介绍利用Java语言开发医疗影像处理系统的设计与实现过程。

二、系统架构设计1. 系统功能模块划分在设计医疗影像处理系统时,我们可以将系统功能划分为以下几个模块: - 影像数据管理模块:负责管理医学影像数据的采集、存储和检索。

- 影像处理模块:包括图像预处理、特征提取、图像分割等功能。

- 影像诊断模块:利用机器学习和深度学习算法进行影像诊断。

- 报告生成模块:根据诊断结果生成专业的医学报告。

2. 技术选型在开发医疗影像处理系统时,我们选择Java作为主要开发语言的原因有以下几点: - Java具有良好的跨平台性,可以在不同操作系统上运行。

- Java拥有丰富的第三方库和框架,便于开发人员快速开发应用。

- Java语言本身具有较高的安全性和稳定性,适合开发医疗领域的应用。

三、系统实现1. 数据管理模块实现数据管理模块主要负责医学影像数据的采集、存储和检索。

我们可以利用Java中的Spring框架来实现数据管理模块,通过Spring Data JPA来操作数据库,实现数据的持久化存储。

示例代码star:编程语言:java// 示例代码@Repositorypublic interface ImageRepository extendsJpaRepository<Image, Long> {List<Image> findByPatientId(Long patientId);}示例代码end2. 影像处理模块实现影像处理模块包括图像预处理、特征提取、图像分割等功能。

我们可以利用Java图像处理库如ImageJ或OpenCV来实现这些功能,通过调用相应的API来对影像数据进行处理。

java中bufferedimage的用法

java中bufferedimage的用法

文章标题:深度解析Java中BufferedImage的用法与应用一、介绍在Java编程中,BufferedImage是一个常用的类,用于处理图像的像素数据。

它提供了丰富的方法和功能,可以用于图像的读取、处理和保存,同时也支持图像的格式转换和像素操作。

在本文中,我们将深度探讨BufferedImage的用法与应用,并介绍其在Java图像处理中的重要性。

二、BufferedImage的基本用法1. BufferedImage的创建在Java中,我们可以通过ImageIO类的read()方法来创建一个BufferedImage对象,例如:```BufferedImage image = ImageIO.read(new File("image.jpg")); ```2. BufferedImage的基本操作BufferedImage类提供了getRGB()和setRGB()方法来读取和修改像素值,同时也支持获取宽度、高度和颜色模型等属性。

三、BufferedImage的高级功能1. 图像格式转换BufferedImage可以方便地进行图像格式的转换,例如将JPEG格式的图像转换为PNG格式:```BufferedImage originalImage = ImageIO.read(newFile("image.jpg"));ImageIO.write(originalImage, "png", new File("image.png"));```2. 像素级操作BufferedImage支持对图像进行像素级操作,例如修改像素颜色、绘制图形和文字等。

四、BufferedImage的应用场景1. 图像处理在图像处理应用中,BufferedImage可以用于图像的读取、编辑和保存,同时也支持图像的缩放、裁剪和旋转等操作。

2. 视频处理在实时视频处理中,BufferedImage可以用于处理视频帧的像素数据,例如视频流的转换、滤镜效果的应用和视频数据的提取等。

Java图像处理:使用Java 2D API实现图片处理

Java图像处理:使用Java 2D API实现图片处理

Java图像处理:使用Java 2D API实现图片处理引言:随着数字摄影技术的发展,我们每天都会拍摄大量的照片。

然而,有时候我们可能需要对这些照片进行一些处理,以使它们更加美观或符合特定的需求。

在本文中,我们将介绍如何使用Java 2D API来实现图片处理,帮助您更好地处理和优化您的图片。

第一部分:Java 2D API简介Java 2D API是Java平台中用于处理图形和图像的强大工具。

它提供了一组丰富的类和方法,使我们能够创建和操作各种图形对象,如线条、矩形、多边形和图像。

Java 2D API还支持图形渲染、颜色管理和图像转换等高级功能。

第二部分:加载和显示图片在开始处理图片之前,我们首先需要加载和显示图片。

Java 2D API提供了Image类来处理图像。

我们可以使用ImageIO类的静态方法read()来从文件中读取图像,并将其保存在一个Image对象中。

然后,我们可以使用Graphics类的drawImage()方法将图像绘制到指定的位置上。

第三部分:图片缩放有时候,我们可能需要调整图片的大小,使其适应特定的显示区域或满足特定的要求。

Java 2D API提供了AffineTransform类来处理图像的变换操作。

我们可以使用AffineTransform类的scale()方法来缩放图像。

通过指定缩放因子,我们可以按比例增加或减小图像的大小。

第四部分:图片旋转除了缩放,有时候我们还需要将图片旋转一定角度。

Java 2D API同样提供了AffineTransform类来实现图像的旋转操作。

我们可以使用AffineTransform类的rotate()方法来指定旋转的角度,并将其应用于图像。

第五部分:图片滤镜效果为了给图片增加一些特殊的效果,Java 2D API提供了一些内置的滤镜类。

我们可以使用这些滤镜类来对图像进行模糊、锐化、亮度调整等操作。

通过创建一个Filter对象,并将其应用于图像,我们可以很容易地实现这些效果。

图片模糊处理的Java实现

图片模糊处理的Java实现

图⽚模糊处理的Java实现 String str = "2.jpg";File f = new File(str);try {BufferedImage image2 = ImageIO.read(f);int w = image2.getWidth();int h = image2.getHeight();int[] arr = image2.getRGB(0, 0, w, h, null, 0, w);int[][] xy = new int[h][w];for(int i = 0;i<h;i++) {for(int k=0;k<w;k++) {xy[i][k] = arr[i*k+k];}}int th =0;int tw =0;for(int i = 0;i<h;i++) {for(int k=0;k<w;k++) {th =i+1;tw = k+1;if((th == h)) {th = h-1;}if((tw == w)) {tw = w-1;}int temp1 = xy[Math.abs(i-1)][k] -xy[i][k];int temp2 = xy[th][k] -xy[i][k];int temp3 = xy[i][Math.abs(k-1)] -xy[i][k];int temp4 = xy[i][tw] -xy[i][k];xy[i][k] =(int)(xy[i][k] + (temp1+temp2+temp3+temp4)/4);};}for(int i = 0;i<h;i++) {for(int k=0;k<w;k++) {arr[i*k+k]=xy[i][k] ;}}image2.setRGB(0, 0, w, h, arr, 0, w);ImageIO.write(image2, "jpg", new File("22.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 其原理就是获取图⽚的像素值,其表⽰就是int 类型的⼀维数组,对于图⽚来说有固定的height 和width ,因此我们将该数组转化为 int [height][width] 的⼆维数组,我们假设该⼆维数组表⽰图像上⾯的各点值,通过算法取出该点上下左右的数值,对其做数学上⾯的取平均值或者,使⽤⽅差等数学⽅法,我们即可得到新的⼆维数组,再将该⼆维数组转给我们的⼀维数组,并通过setRGB ⽅法将像素值覆写,得到图⽚。

详解javagoogleThumbnails图片处理

详解javagoogleThumbnails图片处理

详解javagoogleThumbnails图⽚处理在后端开发的过程中,都逃不开与⽂件传输特别是图⽚的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照⽚更是越来越清晰,但是照⽚⽂件的⼤⼩也是越来越⼤了,⼿机拍照⼩则2M⼤则30M这在⽹络传输过程中谁顶得住呀!所以在⽤户发布照⽚,后端对图像⽂件进⾏保存的过程中压缩图像⽂件是必不可少的⼀个过程。

⽽Thumbnails就是⼀个很好的图像处理⼯具,他把复杂的图像处理封装的很好,只需要短短的⼀⾏代码就能完成对图像的压缩。

Thumbnails⽀持:指定⼤⼩进⾏缩放按照⽐例进⾏缩放不按照⽐例,指定⼤⼩进⾏缩放旋转⽔印裁剪转化图像格式输出到OutputStream输出到BufferedImage输出到ByteArrayOutputStream(OutputStream)输出到ByteArrayInputStream(InputStream)输出到byte[]Thumbnails导⼊依赖<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>⼀,指定⼤⼩进⾏缩放//size(宽度, ⾼度)/** 若图⽚横⽐200⼩,⾼⽐300⼩,不变* 若图⽚横⽐200⼩,⾼⽐300⼤,⾼缩⼩到300,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼩,横缩⼩到200,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼤,图⽚按⽐例缩⼩,横为200或⾼为300*/Thumbnails.of("images/a380_1280x1024.jpg").size(200, 300).toFile("c:/a380_200x300.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(2560, 2048).toFile("c:/a380_2560x2048.jpg");⼆,单个图⽚等⽐例缩放File file = new File("c:\\test.png");Thumbnails.of(new FileInputStream(file)).scale(3.0).toFile(new File("c:\\yyyyy.png"));3.0是⼀个double类型的数字,缩放⽐例,⼤于1就是变⼤,⼩于1就是缩⼩三,不按照⽐例,指定⼤⼩进⾏缩放//keepAspectRatio(false) 默认是按照⽐例缩放的Thumbnails.of("images/a380_1280x1024.jpg").size(200, 200).keepAspectRatio(false).toFile("c:/a380_200x200.jpg");四,批量产⽣缩略图Thumbnails.of(new File("D:\\pics").listFiles()).scale(0.2).outputFormat("png").toFiles(Rename.PREFIX_DOT_THUMBNAIL);五,控制图⽚质量,图⽚尺⼨不变File fromPic = new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_1531741954688.jpeg");File toPic =new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_08.jpeg");Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);outputQuality就是⽤来控制图⽚质量的六,给图⽚加⽔印Thumbnails.of(fromPic).scale(0.8).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(waterPic), 0.5f).outputQuality(0.8f).toFile(toPic);//watermark(位置,⽔印图,透明度)Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_bottom_right.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_center.jpg");fromPic是原图,waterPic是⽔印图⽚,toPic是⽣成后的图⽚七,旋转图⽚Thumbnails.of(fromPic).scale(0.5).rotate(90).toFile(toPic);⼋,图⽚裁剪Thumbnails.of(fromPic).sourceRegion(Positions.CENTER, 300, 300).scale(1.0).toFile(toPic);//sourceRegion()//图⽚中⼼400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.CENTER, 400,400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_center.jpg");//图⽚右下400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400,400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_bootom_right.jpg");//指定坐标Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_coord.jpg");九,WEB输出流图⽚某些应⽤上传的图⽚可能质量⽐较⾼,但是⽤户在列表浏览的时候,⼜不想原图展⽰,因为带宽要求较⾼,此时可以降低图⽚质量(上⾯提到的outputQuality),以outputstream输出流的⽅式response给浏览器去展⽰@RequestMapping("/getImages")public void getImages(HttpServletRequest request, HttpServletResponse response) throws IOException {Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(response.getOutputStream());}⼗,图像的格式转换//outputFormat(图像格式)Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).outputFormat("png").toFile("c:/a380_1280x1024.png");Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).outputFormat("gif").toFile("c:/a380_1280x1024.gif");⼗⼀,输出到BufferedImage//asBufferedImage() 返回BufferedImageBufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).asBufferedImage();ImageIO.write(thumbnail, "jpg", new File("c:/a380_1280x1024_BufferedImage.jpg"));⼗⼆,输出到ByteArrayOutputStream(OutputStream)ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(thumbnailOutputStream);⼗三,输出到ByteArrayInputStream(InputStream)ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(thumbnailOutputStream);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(thumbnailOutputStream.toByteArray());⼗三,输出到byte[]ByteArrayOutputStream handlerOutputStream = new ByteArrayOutputStream();Thumbnails.of(inputStream).scale(1f).outputQuality(0.25f).outputFormat("jpg").toOutputStream(handlerOutputStream);byte[] bytes = handlerOutputStream.toByteArray();到此这篇关于java google Thumbnails 图⽚处理的⽂章就介绍到这了,更多相关java google Thumbnails 图⽚处理内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Im4java操作ImageMagick处理图片

Im4java操作ImageMagick处理图片

Im4java操作ImageMagick处理图⽚背景之前⽤的是JMagick,各种限制各种坑,直到使⽤了Im4java,真是相当的好⽤啊。

项⽬描述ImageMagic的安装可参考:Im4java是ImageMagick的第⼆个java接⼝。

它不是JMagick的替代品,⽽是作为补充。

JMagick是ImageMagick C-API之上的瘦JNI层。

相⽐之下,im4java只为ImageMagick命令⽣成命令⾏,并将⽣成的命令⾏传递给选定的IM 命令(使⽤ng.ProcessBuilder.start() - ⽅法)。

im4java的缺点:您仅限于IM命令的功能。

使⽤JMagick,您可以访问IM的低级接⼝,所以您可以⾮常详细地控制图像处理。

图像处理会有更好的表现。

im4java的优点:IM命令⾏的界⾯⾮常稳定,因此你的java程序(和im4java-library)可以在很多版本的IM上运⾏。

im4java还提供了更好的OO接⼝(IM命令⾏的“语⾔”,其后缀操作符号很容易转换为OO符号)。

最重要的是:你可以在任何地⽅使⽤im4java,⽽JMagick在某些地⽅会因为JNI的危险性⽽⽆法使⽤(例如java应⽤程序服务器)。

注意事项我⽤的ImageMagick版本是ImageMagick-7.0.8-12-Q16-x64-dll.exe,安装完后发现安装⽬录⾥只有个 magick.exe 命令。

程序⾥直接使⽤convert,composite,identify的时候都会报错,提⽰⽂件找不到。

新版本使⽤这些命令必须先写上 magick 命令才⾏,⽐如这样 magick convert xxxx。

原因可能是ImageMagick版本更新了,但是Im4java版本没更新(Im4java版本是1.4.0),导致出现不兼容的情况,解决办法很简单,直接把 magick.exe 复制三份,重命名为其他三个命令就可以了,实测可⽤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* //调试数据的读取
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++){
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];
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++)
idth+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];
|| 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:
二 由 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
nIndex += 3;
}
nIndex += nPad;}//源自Toolkit kit =
Toolkit.getDefaultToolkit();
//
image = kit.createImage(new
MemoryImageSource(nWidth, nHeight,
//
nData, 0, nWidth));
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;
} } return ImageDestination;
}
四 laplace2 阶滤波,增强边缘,图像锐化
public int[] laplace2DFileter(int []data,int width,int height){
int filterData[]=new int[data.length];
0); } return brightnessData;
}
}
三 直方图均衡化
public int [] equilibrateGray(int[] PixelsGray,int width,int
height)
{
int gray;
int length=PixelsGray.length;
int FrequenceGray[]=new int[length];
* (nHeight - j - 1) + i])+"_" i]+"_" i]+"_" i]+" ");
for(int i=0;i<nWidth;i++){ out.print((65536*256+nData[nWidth +nR[nWidth * (nHeight - j - 1) + +nG[nWidth * (nHeight - j - 1) + +nB[nWidth * (nHeight - j - 1) +
| (((int) bi[10] & 0xff) << 16) | (((int) bi[9] & 0xff) << 8) |
bi[14] & 0xff;
// 位数 nBitCount = (((int) bi[15] & 0xff) << 8) | (int)
(int) bi[20] & 0xff;
{
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;
一 读取 bmp 图片数据 // 获取待检测图像 ,数据保存在数组 nData[],nB[] ,nG[] ,nR[]中
public void getBMPImage(String source) throws Exception {
clearNData(); //清除数据保存区
FileInputStream fs = null;
} 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++){
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 信息头
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]]);
(int) bi[4] & 0xff; (int) bi[8] & 0xff;
// 源图宽度 nWidth = (((int) bi[7] & 0xff) << 24)
| (((int) bi[6] & 0xff) << 16) | (((int) bi[5] & 0xff) << 8) |
// 源图高度 nHeight = (((int) bi[11] & 0xff) << 24)
}
}
//
System.out.println("max: "+max);
//
System.out.println("min: "+min);
相关文档
最新文档