昨天晚上在科学松鼠会上看到一篇题为“计算机原来要晃一晃才好用”的文章,里面提到了一种计算机处理数字信号时常用的抖动技术,觉得蛮有意思的所以今天就用万恶的JAVA写了生成二直图像的小程序。

截图:

程序中使用的acm jtf包在http://jtf.acm.org/可以下到,推荐刚开始学java的同学去看Eric S. Roberts的《the art and Science of Java》(影印版),很好的入门教材,还可以顺便提高英语阅读能力。

主程序代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;import acm.program.*;
import acm.graphics.*;import javax.imageio.ImageIO;
import javax.swing.*;public class test_filter extends GraphicsProgram{public void init(){setBackground(Color.gray);slider = new JSlider(0,100,50);add(new JButton("Open Image"),SOUTH);add(new JButton("Process"),SOUTH);add(new JLabel("Dark "),SOUTH);add(slider,SOUTH);add(new JLabel("Bright"),SOUTH);add(new JButton("Save"),SOUTH);addActionListeners();}public void actionPerformed(ActionEvent e){String cmd = e.getActionCommand();if(cmd.equals("Open Image")) openTarget();if(cmd.equals("Process")) process();if(cmd.equals("Save")) save();}private void openTarget(){JFileChooser chooser = new JFileChooser();int fid = chooser.showOpenDialog(this);if(fid == chooser.APPROVE_OPTION){File file = chooser.getSelectedFile();if(file.getName().endsWith(".jpg") || file.getName().endsWith(".JPG")){target = null;target = new GImage(file.getPath());setScale(target);is_target_ready = true;target_thumbnail = thumbnail(target);pic_width = target_thumbnail.getWidth();pic_height = target_thumbnail.getHeight();removeAll();add(target_thumbnail,0,0);}}}private void process(){if(!is_target_ready) return ;double factor = slider.getValue()/50.0;result = dsp.actBwFilter(target,factor);GImage result_thumbnail = thumbnail(result);add(result_thumbnail,pic_width,0);is_result_ready = true;}private void save(){if(!is_result_ready) return ;try {JFileChooser chooser = new JFileChooser();int fid = chooser.showSaveDialog(this);if(fid==JFileChooser.APPROVE_OPTION){File file = chooser.getSelectedFile();ImageIO.write(toBufferedImage(result), "jpg", file);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private BufferedImage toBufferedImage(GImage image){int[][] array = image.getPixelArray();int width = array[0].length;int height = array.length;BufferedImage bimg = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);for(int i=0;i<height;i++){for(int j=0;j<width;j++) bimg.setRGB(j, i, array[i][j]);}return bimg;}private GImage thumbnail(GImage image){GImage thumbnail = dsp.imageSampleAve(image, scale);return thumbnail;}private void setScale(GImage image){if(image.getWidth()>image.getHeight()){scale = (int)(calcuScale(image,1,2)+0.5);}else scale = (int)(calcuScale(image,2,1)+0.5);}private double calcuScale(GImage image,int row,int column){int width = getWidth()/column;int height = getHeight()/row;double ws = image.getWidth()/width;double hs = image.getHeight()/height;if(ws>hs) return ws;return hs;}public static void main(String args[]){new test_filter().start(args);}public static final int APPLICATION_WIDTH = 600;public static final int APPLICATION_HEIGHT = 300;private int scale;private GImage target;private GImage result;private GImage target_thumbnail;private double pic_width;private double pic_height;private JSlider slider;private boolean is_target_ready;private boolean is_result_ready;
}

二值图生成函数:

public static GImage actBwFilter(GImage image){return actBwFilter(image,1);}public static GImage actBwFilter(GImage image,double factor){image = bwFilter(image);int[][] array = image.getPixelArray();RandomGenerator rgen = RandomGenerator.getInstance();int width = array[0].length;int height = array.length;for(int i=0;i<height;i++){for(int j=0;j<width;j++){int color=array[i][j]&0xFF;double p = (double)color/0xFF;if(rgen.nextBoolean(p*factor)) color=0xFF;else color=0x00;array[i][j]=(0xFF<<24)|(color<<16)|(color<<8)|color;}}GImage img = new GImage(array);return img;}

JAVA 数字图像处理----非白即黑的灰,2B青年的自画像相关推荐

  1. Java数字图像处理基础-------Java Swing简单使用,图形绘画---画五角星

    Java数字图像处理基础-------Java Swing简单使用,图形绘画-画五角星 一:简介 要画出五角星出来,我们只需要在面板上产生5个点,然后把这5个点进行连接就可实现: 二:代码演示 imp ...

  2. 关于《Java数字图像处理-编程技巧与应用实践》一书 源代码

    关于<Java数字图像处理-编程技巧与应用实践>一书 源代码 本书所有的源代码我已经整理上传到华章图书的官方网站与 我自己的GITHUB上,本人GITHUB的地址如下: https://g ...

  3. java数字图像处理开题报告,数字图像处理开题报告.doc

    数字图像处理开题报告 开题报告是指开题者对科研课题的一种文字说明材料.这是一种新的应用写作文体,这种文字体裁是随着现代科学研究活动计划性的增强和科研选题程序化管理的需要而产生的.下面是数字图像处理开题 ...

  4. java数字图像处理开题报告,基于MATLAB的数字图像处理算法研究与仿真开题报告...

    基于MATLAB的数字图像处理算法研究与仿真开题报告 毕 业 设 计 (2013 届) 题 目基于 MATLAB 的数字图像 处理算法研究与仿真 学 院 物理电气信息学院 专 业 通信工程 年 级 0 ...

  5. Java数字图像处理基础知识 - 必读

    转载自:http://blog.csdn.net/jia20003/article/details/7279667 写了很多篇关于图像处理的文章,没有一篇介绍Java 2D的图像处理API,文章讨论和 ...

  6. 数字图像处理--几种图像均值滤波的java实现

    在<数字图像处理>一书中介绍了用于降低图像噪声的均值滤波器,分别有算数均值滤波器.几何均值滤波器.谐波均值滤波器.逆谐波均值滤波器.除了降噪,均值滤波器也可以模糊图像,滤波器大小为3.5. ...

  7. 数字图像处理学习笔记4:图像增强之空间滤波2(一阶微分锐化滤波(梯度),二阶微分锐化(拉普拉斯),非锐化掩蔽)

    文章目录 前言 一.一阶微分和二阶微分的定义 二.一阶微分锐化滤波:梯度 1.梯度 2.sobel算子及MATLAB代码 二.二阶微分锐化滤波:拉普拉斯算子 1.拉普拉斯算子 2.拉普拉斯算子MATL ...

  8. 数字图像处理——对图像进行反白、更改调色板信息、彩色图像变灰度、将图像数据保存于txt文件

    数字图像处理课的第一次实验,主要是对BMP图像的处理,并且学习熟悉excel可视化实验数据 实验环境 建立动态库工程,录入HXLBMPFILE类,建立相应动态库,将整个类作为动态库输出 (HXLBMP ...

  9. 图像分割的java程序_基于java的图像分割(数字图像处理)

    [实例简介] 基于java的图像分割(数字图像处理),程序中包含 全局阈值分割,Roberts边缘检测分割,灰度图像,直方图. [实例截图] [核心代码] ImageProcess └── Image ...

最新文章

  1. boost::intrusive::function_hook用法的测试程序
  2. 电路知识--认识原理图(二)
  3. wx:for-item循环数组失败
  4. 目标跟踪 facebook_如何关闭Facebook Messenger的位置跟踪(如果已启用)
  5. Linq下有一个非常实用的SelectMany方法,很多人却不会用
  6. 【51nod - 前缀异或】 对前缀和的理解
  7. 一篇文章学习Python中的多进程
  8. 【Vue.js源码解析 一】-- 响应式原理
  9. Zabbix监控Redis状态
  10. freemarker处理嵌套属性是否为空的判断
  11. 团战开黑必备“良药”了解一下!
  12. 类垂直站点插件实现与分享
  13. 编写一个加密程序,要求从键盘输入一个字符串,然后输出加密后的字符串。加密规则是对每个字母转换为下一个字母表示,原来是a转换为b,原来是B转换为C。小写的z转换为小写的a,大写的Z转换为大写的A。
  14. 记号, 函数空间及不等式
  15. ubuntu下载速度慢的解决办法--修改下载源
  16. 认识电信产品生命周期管理PLM及其PLM服务
  17. 从eclipse官网下载eclipse
  18. oracle 迁移到另一台服务器上,Oracle数据库迁移(从一台服务器迁移到另一台服务器)...
  19. python 函数的使用方法
  20. Job-shop和Flow-shop区别

热门文章

  1. 多机局域网办公神器 rustdesk 使用强推!!!
  2. python数据分析——择偶标准与黑名单
  3. 山西二线城市里,藏着一家年入5亿的互联网卖酒公司
  4. PMML模型文件在机器学习的实践经验
  5. Angular Live Development Server is listening on 0.0.0.0:4200, open your browser on url
  6. yolo论文_YOLO之父宣布退出CV界,坦言无法忽视自己工作带来的负面影响
  7. html a text decoration,你未必知道的CSS小知识:text-decoration属性变成了属性简写
  8. 电信云的原理及相关架构
  9. unigui独立应用部署在电信云上的步骤
  10. 适合ipad的python编程软件-这15个应用,程序员用iPad照样可以编程!