`
luoweifu
  • 浏览: 63340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

数字图像处理的基础

 
阅读更多

大家都知道,人类所获取的信息中,大部分都来自视觉,人类用自己的双眼观察世界,发现世界。图像是对客观存在的物体、场景的一种相似性的生动描述。现在在计算机、网络及电子产品看到的图像都属于数字图像。在讲解图像处理之前需要必备一些关于图像处理的基本知识,下面就对一些常用的关于图像处理的基本知识进行讲解。

像素

像素是基本原色素及其灰度的基本编码。我们看到的数字图片是有一个二维的像素矩阵组成。像素在计算机中通常用3个字节24位保存,如16-23位表示红色(R)分量,8-15位表示绿色(G)分量,0-7位表示蓝色(B)分量;详细信息见下面“计算机颜色模型机RGB”中颜色的表示。

现实世界是三维的,但是我们从现实世界拍摄的图像是二维信息。一张图片可以定义为一个二维函数f(x,y)(x,y)是二维空间中的点坐标,f(x,y)是对应于该点的坐标值,即像素。


当图片尺寸以像素为单位时,每一厘米等于28像素,比如15*15厘米长度的图片,等于420*420像素的长度。

一个像素所能表达的不同颜色数取决于比特每像素(BPP)。如8bpp[2^8=256色,灰度图像]16bpp[2^16=65536色,称为高彩色]24bpps[2^24=16777216色,称为真彩色]

分辨率

图像总像素的多少,称为图像分辨率。由于图像通常用矩阵表示,所以分辨率常用,m*n表示,其中n表示行数(即一列包含的像素)m表示列数(即一行包含的像素)。如640*480,表示图像的长和宽分别为640480,总像素为640*480=307200(相机中所说的30万分辨率),800*600,表示图像的长和宽分别为800600,总像素为800*600=480000(相机中所说的50万分辨率)。

计算机颜色模型机RGB

颜色模型,是将颜色表示成数字形式的模型,或者说是一种记录图像颜色的方式。有RGB模型、CMYK模型、HSL模型、Lab颜色模型等,其中最常用的是RGB模型。

RGB

大家都知道,几乎世界上的所有颜色都可以用红(Red)、绿(Green)、蓝(Blue)三种颜色的不同比例组合形成,红绿蓝被称为三原色。

然而在计算机上他是怎样表示的呢?

在计算机中,RGB三种颜色分别被量化成0255256个等级。这样彩色图像就有256*256*256=16777216种彩色,这种图像被称为全彩色图像(full-colornimage)或真彩色图像(true-colorimage)。

在图像中每一个像素保存一个颜色值,而每种颜色有RGB三种颜色组合而成。所以颜色可以用R、G、B三种颜色的三维坐标表示,如下图:


根据以上图像颜色的组成原理,可以把一个图像分解成RGG三种基颜色的灰度图像。如下图:

原图1 1_red

1_green 1_blue

算法代码实现(java):见下面附录1

特别说明:当一张图片各个像素的RGB三种颜色的分量都相同时就是一个无彩色灰度图像。如下图:


1_gray

算法代码实现(java):见下面附录2

附录


附录1:将图片分解成R、G、B三种灰度图片的算法

/**
	 * 将图片分解成R、G、B三种灰度图片
	 */
	public static void analyseRGB() {
		OutputStream output = null;
		try {
			// read image
			BufferedImage img = ImageIO.read(new File("F:\\image processing\\图1.jpg"));
			int imageType = img.getType();
			int w = img.getWidth();
			int h = img.getHeight();
			int startX = 0;
			int startY = 0;
			int offset = 0;
			int scansize = w;
			int dd = w-startX;
			int hh = h - startY;
			int x0 = w / 2;
			int y0 = h / 2;
			//System.out.println("dd:" + dd + "  hh:" + hh);
			// rgb的数组,保存像素,用一维数组表示二位图像像素数组
			int[] rgbArray = new int[offset + hh * scansize
					+ dd];
			//newArray 保存处理后的像素
			int[] newArray = new int[offset + hh * scansize
			     					+ dd];
			img.getRGB(startX, startY, w, h, rgbArray, offset, scansize);
			
			int rgb = rgbArray[offset + (y0 - startY) * scansize
					+ (x0 - startX)];
			Color c = new Color(rgb);
			//System.out.println("中间像素点的rgb:" + c);
			for(int i=0; i<h-startY; i++) {
				for(int j=0; j<w-startX; j++) {
					c = new Color(rgbArray[i*dd + j]);
					//newArray[i*dd + j] = new Color(c.getRed(), 0, 0).getRGB() ;	//红色灰度图像
					//newArray[i*dd + j] = new Color(0, c.getGreen(), 0).getRGB();	//绿色灰度图像
					newArray[i*dd + j] = new Color(0, 0, c.getBlue()).getRGB();	//蓝色灰度图像
				}
			}
			
			// create and save to bmp
			//File out = new File("F:\\image processing\\图1_red.jpg");
			//File out = new File("F:\\image processing\\图1_green.jpg");
			File out = new File("F:\\image processing\\图1_blue.jpg");
			if (!out.exists())
				out.createNewFile();
			output = new FileOutputStream(out);
			BufferedImage imgOut = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
			imgOut.setRGB(startX, startY, w, h, newArray, offset, scansize);
			ImageIO.write(imgOut, "jpg", output);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (output != null)
				try {
					output.close();
				} catch (IOException e) {
				}
		}
	}


附录2:将图片分解成黑白图片的算法

/**
	 * 将图片分解成黑白图片
	 */
	public static void grayImage() {
		OutputStream output = null;
		try {
			// read image
			BufferedImage img = ImageIO.read(new File("F:\\image processing\\baboom.jpg"));
			int imageType = img.getType();
			int w = img.getWidth();
			int h = img.getHeight();
			int startX = 0;
			int startY = 0;
			int offset = 0;
			int scansize = w;
			int dd = w-startX;
			int hh = h - startY;
			int x0 = w / 2;
			int y0 = h / 2;
			System.out.println("dd:" + dd + "  hh:" + hh);
			// rgb的数组,保存像素,用一维数组表示二位图像像素数组
			int[] rgbArray = new int[offset + hh * scansize
					+ dd];
			//newArray 保存处理后的像素
			int[] newArray = new int[offset + hh * scansize
			     					+ dd];
			img.getRGB(startX, startY, w, h, rgbArray, offset, scansize);
			
			int rgb = rgbArray[offset + (y0 - startY) * scansize
					+ (x0 - startX)];
			Color c = new Color(rgb);
			System.out.println("中间像素点的rgb:" +c+" "+c.getRGB());
			for(int i=0; i<h-startY; i++) {
				for(int j=0; j<w-startX; j++) {
					c = new Color(rgbArray[i*dd + j]);
					//彩色图像转换成无彩色的灰度图像Y=0.299*R + 0.578*G + 0.114*B
					int gray = (int)(0.299*c.getRed() + 0.578*c.getGreen() + 0.114*c.getBlue());
					newArray[i*dd + j] = new Color(gray, gray, gray).getRGB();	//蓝色灰度图像
				}
			}
			
			// create and save to bmp
			File out = new File("F:\\image processing\\baboom_gray.jpg");
			if (!out.exists())
				out.createNewFile();
			output = new FileOutputStream(out);
			BufferedImage imgOut = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
			imgOut.setRGB(startX, startY, w, h, newArray, offset, scansize);
			ImageIO.write(imgOut, "jpg", output);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (output != null)
				try {
					output.close();
				} catch (IOException e) {
				}
		}
	}


分享到:
评论

相关推荐

    数字图像处理基础 朱虹 课件

    《数字图像处理基础》是朱虹教授主讲的一门课程,主要探讨了图像处理领域的基本概念、理论和技术。从给出的描述来看,课程内容可能从第三章开始,这意味着前两章的内容可能涵盖了一些预备知识,如图像的基本概念、...

    数字图像处理基础

    数字图像处理基础讲解,对于数字图像处理还是很有帮助的

    MATLAB 数字图像处理基础实验.doc

    MATLAB 数字图像处理基础实验 MATLAB 是一款功能强大的科学计算语言,它可以满足各种计算需求,并且具有很强的开放性和适用性。在图像处理领域,MATLAB 提供了强大的图像处理工具箱(Image Processing Toolbox),...

    数字图像处理基础知识

    ### 数字图像处理基础知识 #### 一、数字图像处理概述 数字图像处理是一门综合性较强的学科,主要涉及图像处理、图像分析以及图像理解三个层面。它不仅基于传统的数学、物理等基础学科,还融合了现代的人工智能、...

    数字图像处理基础(朱虹)PPT完整版

    《数字图像处理基础》是朱虹教授的一部经典教材,主要涵盖了从基础知识到高级技术的全方位数字图像处理知识。此PPT完整版包含了第2章至第11章的全部内容,是深入学习这一领域的宝贵资源。以下是这些章节中涉及的主要...

    电子科技大学数字图像处理基础7

    电子科技大学数字图像处理基础(冈萨雷斯 阮秋琦翻译)

    数字图像处理基础框架代码

    《数字图像处理基础框架代码》 本程序是一个用于数字图像处理的基础框架,旨在为具有相关经验的研究人员提供一个可扩展的平台,以便于理解和实践数字图像处理的各种算法。该框架的核心是VC++编程语言,利用其高效性...

    数字图像处理基础及OPENCV实现-高清-完整目录-2014年12月

    数字图像处理基础及OPENCV实现-高清-完整目录-2014年12月

    数字图像处理课后习题及中文版解答参照.pdf

    1. 数字图像处理基础知识:数字图像处理(Digital Image Processing)是一门研究如何使用计算机技术来获取、处理、分析和理解图像信息的学科。它涉及图像的获取、存储、处理、分析和理解,广泛应用于医学、遥感、...

    数字图像处理:Ch2 数字图像处理基础.pptx

    数字图像处理基础 数字图像处理是指对数字图像进行处理和分析,以提取有用的信息或实现特定的应用。数字图像处理的基础知识是学习图像处理算法的前提。本章节我们将学习数字图像处理的基础知识,包括量化与分辨率、...

    数字图像处理基础编程

    本程序包括图像的几何变换、灰度变换和直方图拉伸、图像空域增强、中值滤波、梯度锐化、拉普拉斯锐化、图像频域增强、傅里叶变换、巴特沃兹理想低通滤波器、小波变换、理想低通滤波器、理想高通滤波器、图像形态学...

    JAVA-web数字图像处理基础

    以下是对"JAVA-web数字图像处理基础"这一主题的详细解释: 1. **Java图像处理库**:Java提供了丰富的API来处理图像,如Java AWT(Abstract Window Toolkit)和Swing库中的`java.awt.image`包。这些库包含了基本的...

    数字图像处理备课笔记(第1讲 数字图像处理基础)(原创)

    ### 数字图像处理基础知识 #### 一、数字图像处理概览 数字图像处理是指利用计算机对数字图像进行各种处理操作,以实现特定目的的技术。它包括图像的获取、存储、处理、传输等多个方面,广泛应用于科学研究、工业...

    数字图像处理基础知识总结.doc

    《数字图像处理基础知识总结》 数字图像处理是计算机科学领域的一个重要分支,它涉及对数字图像的处理和分析,以实现各种目标,如提高图像质量、提取特征信息、压缩存储和传输图像数据等。数字图像与模拟图像不同,...

    数字图像处理基础.ppt

    《数字图像处理基础》作为一门重要的教学课件,系统地介绍了数字图像处理的基本概念和技术,为学习者提供了一个全面且深入的学习平台。 光谱与人眼特性是数字图像处理的基础,理解人眼感知的波普范围和感知特性对于...

Global site tag (gtag.js) - Google Analytics