欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

图像线性变换

程序员文章站 2023-12-25 23:11:39
...

图像线性变换,像素值计算公式:y=a*x+b

import  java.awt.Color;
import  java.awt.image.BufferedImage;
import  java.io.File;
import  java.io.IOException;

import  javax.imageio.ImageIO;

public  class  ch3_1  {

        public  static  void  main(String[]  args)  throws  Exception  {
                //  TODO  Auto-generated  method  stub
                BufferedImage  bi=ImageIO.read(new  File("1.jpg"));              //读取图像
                BufferedImage  nbi=xianxing(bi,1.5,-50);                         //处理图像
                ImageIO.write(nbi,  "jpg",  new  File("1b.jpg"));                //输出图像
                System.out.println("程序结束!");
        }

        /**
          *  图像线性变换
          *  @param  BufferedImage  bi          原始图像
          *  @param  double  aa                 变换系数
          *  @param  int  bb                    亮度系数
          *  @return  BufferedImage             变换后图像
          *  */
        public  static  BufferedImage  xianxing(BufferedImage  bi,double  aa,int  bb)  {
                int  w=bi.getWidth();                //得到图像的宽度
                int  h=bi.getHeight();               //得到图像的高度
                BufferedImage  nbi=new  BufferedImage(w,  h,  BufferedImage.TYPE_3BYTE_BGR);        //创建新图像(临时图像变量)
                //循环遍历每一个像素点
                for(int  y=0;y<h;y++)  {
                        for(int  x=0;x<w;x++)  {
                                //本次实验的重点内容
                                int  pixel=bi.getRGB(x,  y);               //得到坐标为(x,y)处的像素值
                                Color  c=new  Color(pixel);                //转换为Color类,便于处理
                                int  r=xianxing(c.getRed(),aa,bb);         //红色通道
                                int  g=xianxing(c.getGreen(),aa,bb);       //绿色通道
                                int  b=xianxing(c.getBlue(),aa,bb);        //蓝色通道
                                Color  nc=new  Color(r,g,b);               //根据红绿蓝三个通道,合成新颜色
                                int  rgb=nc.getRGB();                      //转换为int类型
                                nbi.setRGB(x,  y,  rgb);                   //设置输出图像坐标为(x,y)的像素值
                        }
                }                
                return  nbi;
        }

        /**
          *  像素线性变换
          *  */
        private  static  int  xianxing(int  pix,  double  aa,  int  bb)  { 
	        	int y=(int)(aa*pix+bb);
				if(y>255) y=255;
				if(y<0) y=0;
				return y;
        }
}
相关标签: 数字医学图像

上一篇:

下一篇: