文档视界 最新最全的文档下载
当前位置:文档视界 › 数字图像处理灰度化直方图均衡化灰度拉伸

数字图像处理灰度化直方图均衡化灰度拉伸

数字图像处理灰度化直方图均衡化灰度拉伸
数字图像处理灰度化直方图均衡化灰度拉伸

数字图像处理与模式识别

实验目的

打开一幅图像,进行直方图均衡化。并将其灰度线性变化,将灰度线性拉伸。

实验准备

实验之前,收集数字图像处理编程的相关资料,查阅C或Java关于本实验图像处理的相关类库和编程核心。经过C和Java相关资料编程的比较,Java将图像处理的类封装的较完整,运用起来比C灵活方便。以下是相关类库和实现操作的方法:

import java.awt.image.*;

import javax.imageio.*; //相关的图像处理类库和方法封装在两个包中

//Java读取图像的方法

BufferedImage newImage = ImageIO.read(new File(filePath));

int width = newImage.getWidth(); //获得图像的像素宽度

int height = newImage.getHeight(); //获得图像像素的长度

//获得图像的色彩模型RGB分量

ColorModel colorModel = ColorModel.getRGBdefault();

int r = colorModel.getRed(currPixArray[k]);

int g = colorModel.getGreen(currPixArray[k]);

int b = colorModel.getBlue(currPixArray[k]); //分别获得图像的rgb分量PixelGrabber p = new PixelGrabber(image, 0, 0, width, height, array, 0, width); //将image图像像素值读入一位矩阵

实验步骤

算法实现

RGB图像转灰度图

由于数字图像的直方图均衡化和灰度的线性拉伸都是基于灰度图的算法实现,本框架中增加了由彩色图转灰度图的功能。简单讲述下算法思想:将存储图像的一维矩阵像素点彩色

分量用ColorModel类中的getRed(),getGreen()和getBlue()方法读取,按照(r * 0.3 + g * 0.59 + b * 0.11)公式计算灰度值。

部分关键代码如下:

for (i = 0; i < height; i++) {

for (j = 0; j < width; j++) {

k = i * width + j;

r = colorModel.getRed(currPixArray[k]);

g = colorModel.getGreen(currPixArray[k]);

b = colorModel.getBlue(currPixArray[k]);

gray = (int) (r * 0.3 + g * 0.59 + b * 0.11);

r = g = b = gray;

grayArray[k] = (255 << 24) | (r << 16) | (g << 8) | b;

}

}

测试效果:

原图灰度图

直方图均衡化

一幅数字图像存在一个灰度范围,每个像素都有不同的灰度值,因此每个灰度级别出现的概率都会有所不同。直方图的均衡化就是将每个灰度级出现的概率尽量均匀的分布在灰度范围之内(实际操作不可能完全均匀分布),达到图像增强,图像信息最多的效果。

首先进行每个灰度级别(0-255)出现的在数字图像的概率,然后通过概率累计的方式将离散的概率值进行累加,得到新的灰度级别的概率进行均匀分布在灰度范围内,修改更新数字图像一维像素矩阵的的灰度值,便可达到直方图均衡化的效果。(Java具体实现还应注意些小细节,代码中的注释将给出) 核心代码如下:

int grayLevel; // 每个像素的灰度级

int[] grayArray = new int[256]; // 记录每个灰度级出现的像素数量

int[] resPixArray = new int[width * height]; // 均衡化之后的新像素矩阵

for (int i = 0; i < height; i++) {

for (int j = 0; j < width; j++) {

grayLevel = currPixArray[i * width + j] & 0xff; // 后8位为该像素的灰度级

grayArray[grayLevel]++;

}

}

double[] p = new double[256]; // 记录每个灰度级的出现的概率

for (int i = 0; i < 256; i++)

p[i] = (double) grayArray[i] / (width * height);

p[0] = (double) grayArray[0] / (width * height);

grayArray[0] = (int) (p[0] * 255 + 0.5);

for (int i = 0; i < 255; i++) {

p[i + 1] += p[i];

grayArray[i + 1] = (int) (p[i + 1] * 255 + 0.5);

}

int gray, newgray;

for (int i = 0; i < height; i++) {

for (int j = 0; j < width; j++) {

gray = currPixArray[i * width + j] & 0x0000ff;

newgray = (int) grayArray[gray];

resPixArray[i * width + j] = 255 << 24 | newgray << 16

| newgray << 8 | newgray; // Java中256色的图像表示方法如下}

}

测试效果:

灰度图直方图均衡化后

灰度线性拉伸

图像灰度线性拉伸就是将图像(灰度范围[0,Mf])的灰度值大部分分布在[a,b]范围

内的像素灰度值通过某一线性表达是拉伸到[c,d]灰度范围内,从而达到图像增强的效果。具体通过以下公式实现:

c 0<=f(x,y)

g(x,y) = (d-c)/(b-a) * [f(x,y)-a] + c a<=f(x,y)

d b<=f(x,y)

核心代码如下:

int[] resPixArray = new int[width * height];

int gray, newgray;

for (int i = 0; i < height; i++) {

for (int j = 0; j < width; j++) {

gray = currPixArray[i * width + j] & 0x0000ff;

if (gray < a)

newgray = c;

else if (gray < b)

newgray = (int) (1.0 * (d - c) / (b - a) * (gray - a) + c);

else

newgray = d;

resPixArray[i * width + j] = 255 << 24 | newgray << 16

| newgray << 8 | newgray; // Java中256色的图像表示方法如下}

}

测试效果:(通过某一线性变化)

灰度图灰度线性拉伸后

实验总结

本实验主要进行的是数字图像的读入,将直方图进行均衡化,以及灰度的线性拉伸。在本实验中为了实现Java版本的数字图像开发平台,查阅许多Java方面的数字图像编程资料,搭建了平台的基本框架,方便以后实验算法功能集成到本平台上来。实验报告中给出了算法实现的基本思路和部分代码,以及测试的效果图,均较好的符合实际效果。

实验中加深了数字图像处理流程的基本方法,进一步巩固理解了直方图的均衡化和灰度拉伸的理论知识,为日后完善该平台打下了基础。当然实验过程中避免不了许多失误和不解,望日后一一改正完善。

//Function.java

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.awt.image.ColorModel;

import java.awt.image.MemoryImageSource;

import java.awt.image.PixelGrabber;

import javax.swing.ImageIcon;

public class Function {

public BufferedImage newImage; // 加载的图像

public int currPixArray[] = null; // 当前图像的像素矩阵

public int width; // 图像的宽

public int height; // 图像的高

public Function() {

}

public Function(int width, int height) {

this.width = width;

this.height = height;

}

// 获得图像像素的矩阵用一维数组处理

public int[] getPixArray(Image im) {

PixelGrabber p;

int[] array = new int[width * height];

try {

p = new PixelGrabber(im, 0, 0, width, height, array, 0, width);

if (p.grabPixels() == false)

try {

throw new Exception();

} catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e) {

e.printStackTrace();

}

return array;

}

// 灰度转换

public int[] RGBtoGray(int[] currPixArray) {

int[] grayArray = new int[height * width];

ColorModel colorModel = ColorModel.getRGBdefault();

int i, j, k, r, g, b;

int gray;

for (i = 0; i < height; i++) {

for (j = 0; j < width; j++) {

k = i * width + j;

r = colorModel.getRed(currPixArray[k]);

g = colorModel.getGreen(currPixArray[k]);

b = colorModel.getBlue(currPixArray[k]);

gray = (int) (r * 0.3 + g * 0.59 + b * 0.11);

r = g = b = gray;

grayArray[k] = (255 << 24) | (r << 16) | (g << 8) | b;

}

}

return grayArray;

}

// 图像均衡化

public int[] toBalance(int[] currPixArray) {

int grayLevel; // 每个像素的灰度级

int[] grayArray = new int[256]; // 记录每个灰度级出现的像素数量

int[] resPixArray = new int[width * height]; // 均衡化之后的新像素矩阵

for (int i = 0; i < height; i++) {

for (int j = 0; j < width; j++) {

grayLevel = currPixArray[i * width + j] & 0xff; // 后8位为该像素的灰度级

grayArray[grayLevel]++;

}

}

double[] p = new double[256]; // 记录每个灰度级的出现的概率

for (int i = 0; i < 256; i++) {

p[i] = (double) grayArray[i] / (width * height);

}

p[0] = (double) grayArray[0] / (width * height);

grayArray[0] = (int) (p[0] * 255 + 0.5);

for (int i = 0; i < 255; i++) {

p[i + 1] += p[i];

grayArray[i + 1] = (int) (p[i + 1] * 255 + 0.5);

}

int gray, newgray;

for (int i = 0; i < height; i++) {

for (int j = 0; j < width; j++) {

gray = currPixArray[i * width + j] & 0x0000ff;

newgray = (int) grayArray[gray];

resPixArray[i * width + j] = 255 << 24 | newgray << 16

| newgray << 8 | newgray; // Java中256色的图像表示方法如下}

}

return resPixArray;

}

// 灰度线性拉伸从[a,b]拉伸至[c,d]

public int[] grayStretch(int[] currPixArray, int a, int b, int c, int d) {

int[] resPixArray = new int[width * height];

int gray, newgray;

for (int i = 0; i < height; i++) {

for (int j = 0; j < width; j++) {

gray = currPixArray[i * width + j] & 0x0000ff;

if (gray < a)

newgray = c;

else if (gray < b)

newgray = (int) (1.0 * (d - c) / (b - a) * (gray - a) + c);

else

newgray = d;

resPixArray[i * width + j] = 255 << 24 | newgray << 16

| newgray << 8 | newgray; // Java中256色的图像表示方法如下}

}

return resPixArray;

}

}

//MyImageProcess.java

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

import java.awt.image.ColorModel;

import java.awt.image.MemoryImageSource;

import java.awt.image.PixelGrabber;

import javax.imageio.*;

import java.io.*;

public class MyImageProcess extends JFrame {

private String filePath = null; // 图像的文件路径

private BufferedImage newImage; // 加载的图像

private int currPixArray[] = null; // 当前图像的像素矩阵

private JLabel imageLabel = null; // 用于显示图像的标签

private int height; // 图像的高

private int width; // 图像的宽

private Function fun; // 功能操作类

public MyImageProcess(String title) {

super(title);

JMenuBar bar = new JMenuBar();

JMenu fileMenu = new JMenu("File ");

bar.add(fileMenu);

JMenuItem openImage = new JMenuItem("Open file");

fileMenu.add(openImage);

openImage.addActionListener(new OpenListener());

JMenuItem exitItem = new JMenuItem("Exit");

fileMenu.add(exitItem);

exitItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

JMenu processMenu = new JMenu("Process ");

bar.add(processMenu);

JMenuItem toGray = new JMenuItem("RGB to Gray");

processMenu.add(toGray);

toGray.addActionListener(new ToGrayListener());

JMenuItem toBalance = new JMenuItem("Balace");

processMenu.add(toBalance);

toBalance.addActionListener(new ToBalanceListener());

JMenuItem grayStretch = new JMenuItem("Gray Linear Stretch");

processMenu.add(grayStretch);

grayStretch.addActionListener(new GrayStretchListener()); // 注册时已产生新的窗口

// 但不可见

JMenu helpMenu = new JMenu("Help ");

bar.add(helpMenu);

this.setJMenuBar(bar); // 显示菜单栏

try {

imageLabel = new JLabel("");

newImage = ImageIO.read(this.getClass().getResource("super.jpg"));

width = newImage.getWidth();

height = newImage.getHeight();

fun = new Function(width, height);

currPixArray = fun.getPixArray(newImage);

imageLabel.setIcon(new ImageIcon(newImage));

} catch (Exception e) {

e.printStackTrace();

}

JScrollPane pane = new JScrollPane(imageLabel);

this.add(pane, BorderLayout.CENTER);

}

private class OpenListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

JFileChooser file = new JFileChooser();

int retvalue = file.showOpenDialog(null);

if (retvalue == JFileChooser.APPROVE_OPTION) {

File selectedFile = file.getSelectedFile();

if (selectedFile != null) {

filePath = selectedFile.getAbsolutePath();

try {

newImage = ImageIO.read(new File(filePath));

width = newImage.getWidth();

height = newImage.getHeight();

fun = new Function(width, height);

currPixArray = fun.getPixArray(newImage);

imageLabel.setIcon(new ImageIcon(newImage));

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

MyImageProcess.this.repaint();

// MyShowImage.this.pack();

}

}

private class ToGrayListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

int[] resultArray = fun.RGBtoGray(currPixArray);

currPixArray = resultArray;

showImage(resultArray);

}

}

private class ToBalanceListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

int[] resultArray = fun.toBalance(currPixArray);

currPixArray = resultArray;

showImage(resultArray);

}

}

private class GrayStretchListener extends JFrame implements ActionListener {

private JSlider slider1;

private JSlider slider2;

private JSlider slider3;

private JSlider slider4;

private JButton ok;

private JButton cancle;

private int a, b, c, d; // 图像灰度伸缩的参数

public GrayStretchListener() {

JPanel panel = new JPanel();

panel.setLayout(null);

slider1 = new JSlider(0, 255);

slider2 = new JSlider(0, 255);

slider3 = new JSlider(0, 255);

slider4 = new JSlider(0, 255);

panel.add(slider1);

slider1.setBounds(20, 20, 300, 20);

panel.add(slider2);

slider2.setBounds(20, 70, 300, 20);

panel.add(slider3);

slider3.setBounds(20, 120, 300, 20);

panel.add(slider4);

slider4.setBounds(20, 170, 300, 20);

ok = new JButton("OK");

panel.add(ok);

ok.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

a = slider1.getValue();

b = slider2.getValue();

c = slider3.getValue();

d = slider4.getValue();

System.out.println(a + " " + b + " " + c + " " + d);

int[] resultArray = fun.grayStretch(currPixArray, a, b, c,

d);

// imageStack.addLast(resultArray);

currPixArray = resultArray;

showImage(resultArray);

// tempImageStack.clear();

dispose();

}

});

ok.setBounds(60, 220, 80, 30);

cancle = new JButton("Cancle");

panel.add(cancle);

cancle.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

dispose();

}

});

cancle.setBounds(200, 220, 80, 30);

Container c = getContentPane();

c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));

c.add(panel);

this.setVisible(false);

this.setLocationRelativeTo(null);

this.setSize(380, 300);

this.setTitle("Gray Linear Stretch");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

// Gray Linear Stretch菜单项事件监听只改变窗口的可见性

public void actionPerformed(ActionEvent e) {

this.setVisible(true);

}

}

// 显示图片

private void showImage(int[] array) {

Image pic = this.createImage(new MemoryImageSource(width, height,

array, 0, width));

ImageIcon icon = new ImageIcon(pic);

imageLabel.setIcon(icon);

imageLabel.repaint();

}

public static void main(String args[]) {

MyImageProcess process = new MyImageProcess("My Image Processer");

process.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

process.setLocationRelativeTo(null);

process.setSize(600, 480);

process.setVisible(true);

}

}

数字图像处理实验报告

实验一灰度图像直方图统计 一、实验目的 掌握灰度图像直方图的概念和计算方法,了解直方图的作用和用途。提高学生编程能力,巩固所学知识。 二、实验内容和要求 (1)用Photoshop显示、了解图像平均明暗度和对比度等信息; (2)用MatLab读取和显示一幅灰度图像; (3)用MatLab编写直方图统计的程序。 三、实验步骤 1. 使用Photoshop显示直方图: 1)点击文件→打开,打开一幅图像; 2)对图像做增强处理,例如选择图像→调整→自动对比度对图像进行灰度拉伸,观察图像进行对比度增强前后的视觉变化。 3)利用统计灰度图像直方图的程序分别针对灰度拉伸前后的灰度图像绘制其灰度直方图,观察其前后的直方图变化。 2.用MatLab读取和显示一幅灰度图像; 3. 绘制图像的灰度直方图; function Display_Histogram()

Input=imread('timg.jpg'); figure(100); imshow(uint8(Input)); title('原始图像'); Input_Image=rgb2gray(Input); figure(200); imshow(uint8(Input_Image)); title('灰度图像'); sum=0; His_Image=zeros(1,256); [m,n]=size(Input_Image); for k=0:255 for I=1:m for j=1:n if Input_Image(I,j)==k His_Image(k+1)=His_Image(k+1)+1; end end end end figure(300); plot(His_Image); title('图像的灰度直方图'); 4.显示图像的灰度直方图。

图像灰度变换实验报告

图像灰度变换报告 一.实验目的 1.学会使用Matlab ; 2.学会用Matlab 软件对图像进行灰度变换,观察采用各种不同灰度变换发法对最终图像效果的影响; 二.实验内容 1.熟悉Matlab 中的一些常用处理函数 读取图像:img=imread('filename'); //支持TIF,JPEG,GIF,BMP,PNG 等文件格式。 显示图像:imshow(img,G); //G 表示显示该图像的灰度级数,如省略则默认为256。 保存图片:imwrite(img,'filename'); //不支持GIF 格式,其他与imread 相同。 亮度变换:imadjust(img,[low_in,high_in],[low_out,high_out]); //将low_in 至high_in 之间的值映射到low_out 至high_out 之 间,low_in 以下及high_in 以上归零。 绘制直方图:imhist(img); 直方图均衡化:histeq(img,newlevel); //newlevel 表示输出图像指定的灰度级数。 2.获取实验用图像:rice.jpg. 使用imread 函数将图像读入Matlab 。 3 .产生灰度变换函数T1,使得: 0.3r r < 0.35 s = 0.105 + 2.6333(r – 0.35) 0.35 ≤ r ≤ 0.65 1 + 0.3(r – 1) r > 0.65 用T1对原图像rice.jpg 进行处理,使用imwrite 函数保存处理后的新图像。 4.产生灰度变换函数T2,使得: s = 5.用T2imwrite 保存处理后的新图像。 6.分别用 s = r 0.6; s = r 0.4; s = r 0.3 对kids.tiff 图像进行处理。为简便起见,使用Matlab 中的imadjust 函数,最后用imwrite 保存处理后的新图像。 7.对circuit.jpg 图像实施反变换(Negative Transformation )。s =1-r; 使

matlab图像处理图像灰度变换直方图变换

附录1 课程实验报告格式 每个实验项目包括:1)设计思路,2)程序代码,3)实验结果,4)实验中出现的问题及解决方法。 实验一:直方图灰度变换 A:读入灰度图像‘debye1.tif’,采用交互式操作,用improfile绘制一条线段的灰度值。 imread('rice.tif'); imshow('rice.tif'),title('rice.tif'); improfile,title('主对角线上灰度值')

B:读入RGB图像‘flowers.tif’,显示所选线段上红、绿、蓝颜色分量的分布imread('flowers.tif'); imshow('flowers.tif'),title('flowers.tif'); improfile,title('主对角线红绿蓝分量') C:图像灰度变化 f=imread('rice.png'); imhist(f,256); %显示其直方图 g1=imadjust(f,[0 1],[1 0]); %灰度转换,实现明暗转换(负片图像) figure,imshow(g1)%将0.5到0.75的灰度级扩展到范围[0 1] g2=imadjust(f,[0.5 0.75],[0 1]); figure,imshow(g2) 图像灰度变换处理实例: g=imread('me.jpg'); imshow(g),title('原始图片'); h=log(1+double(g)); %对输入图像对数映射变换 h=mat2gray(h); %将矩阵h转换为灰度图片

h=im2uint8(h); %将灰度图转换为8位图 imshow(h),title('转换后的8位图'); 运行后的结果: 实验二:直方图变换 A:直方图显示 I=imread('cameraman.tif'); %读取图像 subplot(1,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题运行结果如下:

实验-直方图统计及亮度调整概要

实验 2.直方图统计及亮度调整 一、实验目的 了解并掌握直方图统计方法以及分段线性拉伸、直方图均衡等亮度调整算法, 通过观察对这些运算建立感性认识。 二、实验内容 1. 观察各类图像的直方图; 2. 操作 LUT 灰度对照表,进行分段线性拉伸; 3. 采用直方图均衡方法对低对比度的图像进行对比度增强。 三、基本原理 1.直方图的定义 图象的灰度直方图是一个函数, 表示数字图象中每一灰度级与该灰度级出现的频数 (即具有这一灰度级的象素数目间的对应关系: P b N b M ( ( = M 为一幅图象所包含的象素总数; N (b 为图象中灰度值为 b 的象素总数。通常,以灰度值 b 为横坐标, N (b 为纵坐标。直方图是图象中象素灰度值的一阶概率分布密度的一种近似。 2.对比度增强 对比度增强又称为点运算,逐点改变输入图象的每一象素的灰度,而各象素的位置不改变, 一般用来拓宽图象的灰度范围。

(1灰度变换法(LUT 对照 典型的对比度拉伸灰度变换关系如图 1所示,其对应关系如下: g f f a f a g a f b f b g b f L a b = ≤< -+≤< -+≤

图 1. 典型的对比度拉伸灰度变换关系 可见,输出和输入图象之间各点的灰度是按照一定的映射关系相联系的,这种映射关系在计算机中则是通过一个查照表(look-up table,即 LUT 实现的。通过 LUT 对照改变了图象中不同灰度特性趋于的对比度或反差(contrast ,达到改善视觉效果的目的。 (2 直方图均衡 直方图均衡(histogram equalization就是通过点运算使输入图像的灰度分布较为均匀, 使图像具有较好的视觉效果。设 r , s 分别为原图和新图的灰度, ?r (r , ?s (s 分别为原图及新图的概率密度函数,则均衡变换为原图像的累积分布函数: s T r r r r ==?( ?( 0 对于离散图像,均衡转换公式为: ∑∑=====k j j k j j r k k n M L r P r T s 0max 0 ( ( 其中, L max 指图像中的最大灰度值(对于灰度图像就是 255。 四、实验步骤 (一 Matlab 的 demo 演示

图像空域增强算法设计——灰度变换增强

成绩评定表

课程设计任务书

摘要 空域增强在数字图像处理中起到对图像灰度的拉伸、压缩变换的作用,目前这种方法在处理图像灰度值方面得到广泛的运用。MATLAB这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以利用MATLAB软件来对图像进行空域增强在数字图像处理的应用中具有很大的优势。 图像变换增强是利用一系列的变换方法使图像的对比度得到提升,也就达到了增强图像的目的--更便于观察,更容易区分不同灰度的图像。根据函数的性质,灰度变换的方法有线性灰度变换、分段线性灰度变换、非线性灰度变换。对于灰度局限在某一个很小范围内的数字图像,如果用线性函数对图像的每一个像素进行线性扩展,扩大像素的对比度,将有效地改善视觉效果。本文利用MATLAB软件对灰度图像分别进行了线性灰度变换增强,非线性灰度增强和分段线性灰度增强,达到了提高图像对比度,增强图像效果的目的,证明了图像变换增强在数字图像处理中的重要作用。 关键词:MATLAB;灰度图像;线性变换;非线性变换

目录 1设计目的 (1) 2设计方案 (1) 2.1 灰度变换增强的概念 (1) 2.2 灰度变换增强流程 (2) 3设计内容 (3) 3. 1 线性灰度变换的概述 (3) 3. 2 分段线性灰度变换的概述 (3) 3. 3非线性灰度变换的概述 (4) 4程序代码设计 (5) 4.1线性灰度变换增强 (5) 4.1.1线性变换增强流程 (5) 4.1.2线性变换增强设计 (5) 4.2分段线性灰度变换程序代码 (6) 4.2.1分段线性变换增强流程 (6) 4.2.2分段线性变换增强设计 (6) 4.3非线性灰度变换程序代码 (8) 4.3.1非线性变换增强流程 (8) 4.3.2非线性变换增强设计 (8) 5仿真结果与分析 (10) 5.1线性灰度变换仿真结果 (10) 5.2分段线性灰度变换仿真结果 (11) 5.3非线性灰度变换仿真结果 (12) 5.4结果分析 (12) 结论 (14) 参考文献 (15)

数字图像处理实验二 图像灰度变换

实验二 图像灰度变换实验一、 实验目的熟悉亮度变换函数的使用熟悉灰度图像的直方图的表示;掌握图像增强的基本方法:灰度变换、直方图均衡;二、实验内容灰度线性变换、灰度直方图、直方图均衡处理;灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。三、实验原理1.函数imadjust 函数imadjust 是对灰度图像进行亮度变换的基本命令,语法为: g = imadjust(f, [low_in high_in], [low_out high_out], gamma) 将图像f 中的亮度值(灰度值)映射到新图像g 中,即将low_in 至high_in 之间的值映射到low_out 至high_out 之间的值。low_in 以下的灰度值映射为low_out ,high_in 以上的灰度值映射为high_out ,函数imadjust 的矩阵[ ]内参数均指定在0和1之间,[low_in high_in]和[low_out high_out]使用空矩阵[ ]会得到默认值[0 1]。若high_out 小于low_out ,则输出图像会反转。 参数gamma 指定了曲线(变换函数)的形状,若gamma 小于1,则映射被加权至更高(更亮)的输出值;若gamma 大于1,则映射被加权至更低(更暗)的输出值。若省略了函数的参量gamma ,则gamma 默认为1——即线性映 射。 >>f = imread(‘filename’)>>imshow(f)>>g1 = imadjust(f, [0 1], [1 0]); %图像反转>>figure, imshow(g1) %figure 命令表示同时显示多个窗口 >>g2 = imadjust(f, [0.5 0.75], [0 1]); %将0.5至0.75之间的灰度级扩展到范围0和1之间 >>figure, imshow(g2) >>g3 = imadjust(f, [ ], [ ], 2) %使用gamma 值 >>figure, imshow(g3)

灰度图像直方图统计

1.灰度图像直方图统计实习报告 一、实习目的 在学习灰度图像直方图的概念、计算方法、性质和相关应用的基础上,应用Photoshop软件和编写灰度直方图统计程序,能初步掌握图像文件格式读写与图像数据处理,提高学生兴趣和编程能力,巩固所学知识。 二、实习内容 1.实习数据 E:\ 数字图像处理\实习一\Lena.raw 2.利用Photoshop显示图像的灰度直方图,从直方图上了解图像平均明暗度和对比度等信息。 3.要求利用C或C++语言编写灰度图像直方图统计的程序。 三、实习步骤 1.使用Photoshop显示直方图。 (1)点击“文件”-->“打开”,打开一幅图像,此处选取“lena.raw”; (2)点击“图像”-->“直方图”,显示图像的直方图;

(3)对图像做增强处理,例如选择“图像”-->“调整”-->“自动对比度”对图像进行灰度拉伸,然后再显示直方图,观察它的变化。 2.用C或C++编写显示直方图的程序。 具体代码如下: #include "stdio.h" #include "windows.h" void main() { FILE *fp; //文件类指针

fp=fopen("lena.raw","rb"); //打开二进制文件 if (fp==NULL) { printf("文件已损坏,请重新打开。 \n"); } else printf("文件已打开,已经生成.txt文档,请查看。\n"); BYTE PIXEL[512*512]; fread(PIXEL,1,512*512,fp);//二进制文件读取 fclose(fp);//关闭文件 int HistogramStat[256]; for(int i=0;i<256;i++) HistogramStat[i]=0;//赋初值 for (i=0;i<512*512;i++) { int a=PIXEL[i]; HistogramStat[a]++; } //统计像素个数 fp=fopen("灰度直方图.txt","rb"); fprintf(fp,"图像灰度,像素个数\n"); for (i=0;i<256;i++) { if (HistogramStat[i]!=0) fprintf(fp,"%5d,%5d\n",i,HistogramStat[i]); } fprintf(fp,"像素个数为0的已被省略。");//输出内容 } 四、思考题 1灰度直方图可以反映出一幅图像的哪些特性? 答:(1)表征了图像的一维信息。只反映图像中像素不同灰度出现的次数,而未反映像素所在的位置。即丢失了像素的位置信息。 (2)与图像之间的关系式多对一的映射关系。一幅图像唯一确定出与之对应的直方图,但不同的图像可能有相同的直方图。 (3)一幅图像可分为多个子区域,子图直方图之和为整图的直方图。 2灰度直方图有何用途?编程实现一种灰度直方图应用的程序。 答:(1)用于判断图像量化是否恰当。 (2)用于确定图像的二值化阈值。 (3)计算图像中物体的面积。 (4)计算图像信息量H(熵)。 3在本次实习的基础上,试编写直方图均衡的程序。 五、实习心得体会

实验一Matlab图像处理基础及图像灰度变换

实验一Matlab图像处理基础及图像灰度变换 一、实验目的 了解Matlab平台下的图像编程环境,熟悉Matlab中的DIP (Digital Image Processing)工具箱;掌握Matlab中图像的表示方法,图像类型、数据类型的种类及各自的特点,并知道怎样在它们之间进行转换。掌握Matlab环境下的一些最基本的图像处理操作,如读图像、写图像、查看图像信息和格式、尺寸和灰度的伸缩等等;通过实验掌握图像直方图的描绘方法,加深直方图形状与图像特征间关系间的理解;加深对直方图均衡算法的理解。 二、实验内容 1.从硬盘中读取一幅灰度图像; 2.显示图像信息,查看图像格式、大小、位深等内容; 3.用灰度面积法编写求图像方图的Matlab程序,并画图; 4.把第3步的结果与直接用Matlab工具箱中函数histogram的结果进行比较,以衡量第3步中程序的正确性。 5.对读入的图像进行直方图均衡化,画出处理后的直方图,并比较处理前后图像效果的变化。 三、知识要点 1.Matlab6.5支持的图像图形格式 TIFF, JEPG, GIF, BMP, PNG, XWD (X Window Dump),其中GIF不支持写。 2.与图像处理相关的最基本函数 读:imread; 写:imwrite; 显示:imshow; 信息查看:imfinfo; 3.Matlab6.5支持的数据类 double, unit8, int8, uint16, int16, uint32, int32, single, char (2 bytes per element), logical. 4.Matlab6.5支持的图像类型 Intensity images, binary images, indexed images, RGB image 5.数据类及图像类型间的基本转换函数 数据类转换:B = data_class_name(A);

实验2(A) 灰度图像直方图统计与均衡化

实验2 灰度图像直方图统计与均衡化 一、 实验目的 1. 学习灰度图像直方图的概念、计算方法、性质和相关应用。 2. 利用VC++编写灰度图像直方图统计程序。 3. 掌握灰度直方图的概念及其计算方法; 4. 熟练掌握直力图均衡化和直方图规定化的计算过程; 5. 熟练掌握空域滤波中常用的平滑和锐化滤波器; 6. 掌握色彩直方图的概念和计算方法 7. 利用VC++程序进行图像增强。 二、 实验原理 灰度直方图是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像中每种灰度出现的频率。 i i v n n = (0.1) 式中,n 是图像总的像素个数;n i 是图像中具有第i 个灰度级的像素个数;v i 是第i 个灰度级出现的频率。 依据定义,若图像具有L 级灰度,通常L =256,即8位灰度级,则大小为M ?N 的灰度图像f (x , y )的灰度直方图hist[0, …, L -1]可用如下步骤计算获得: ① 初始化,hist[k ]=0 ; k =0, 1, …, L -1。 ② 按像素扫描图像,对灰度级中的每个灰度值,统计图像中具有该灰度值的像素个数。 (),;0,1,,1;0,1,,1hist f x y x M y N ++=-=-???? (0.2) 3. 直方图归一化。 ()(),hist f x y M N ?????i i v n n = (0.3) 图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要有直方图修改处理、图像平滑化处理、图像尖锐化处理和彩色处理技术等。本实验以直方图均衡化增强图像对比度的方法为主要内容,其他方法同学们可以在课后自行联系。

基于灰度直方图的图像分割阈值自适应选取方法

中北大学 毕业设计(论文)任务书 学院、系: 专业: 学生姓名:车永健学号: 设计(论文)题目:基于灰度直方图的图像分割阈值自适应选取方法 起迄日期: 2015年3月9日~2015年6月20日设计(论文)地点: 指导教师:郭晨霞 系主任: 发任务书日期:2015年 2 月25 日

任务书填写要求 1.毕业设计(论文)任务书由指导教师根据各课题的具体情况填写,经学生所在系的负责人审查、系领导签字后生效。此任务书应在毕业设计(论文)开始前一周内填好并发给学生; 2.任务书内容必须用黑墨水笔工整书写或按教务处统一设计的电子文档标准格式(可从教务处网页上下载)打印,不得随便涂改或潦草书写,禁止打印在其它纸上后剪贴; 3.任务书内填写的内容,必须和学生毕业设计(论文)完成的情况相一致,若有变更,应当经过所在专业及系主管领导审批后方可重新填写; 4.任务书内有关“学院、系”、“专业”等名称的填写,应写中文全称,不能写数字代码。学生的“学号”要写全号(如020*******,为10位数),不能只写最后2位或1位数字; 5.有关年月日等日期的填写,应当按照国标GB/T 7408—94《数据元和交换格式、信息交换、日期和时间表示法》规定的要求,一律用阿拉伯数字书写。如“2004年3月15日”或“2004-03-15”。

毕业设计(论文)任务书

毕业设计(论文)任务书 3.对毕业设计(论文)课题成果的要求〔包括毕业设计(论文)、图纸、实物样品等): 1、论文一份; 2、程序代码及图像结果; 3、英文翻译一份。 4.毕业设计(论文)课题工作进度计划: 起迄日期工作内容 2015年 3月 9 日~ 3 月20日 4 月 1 日~ 4月 20 日 4 月 21 日~ 5月 10 日 5 月 11 日~ 6月 15 日 6 月 16 日~ 6月 19 日查找资料,完成开题报告; 学习有关知识,方案确定,完成中期报告;完善算法并仿真验证; 撰写、修改、评阅毕业论文; 论文答辩 学生所在系审查意见: 系主任: 年月日

实验三 图像增强--灰度变换

实验三图像增强—灰度变换 一、实验目的: 1、了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。 2、学会对图像直方图的分析。 3、掌握直接灰度变换的图像增强方法。 二、实验原理及知识点 术语‘空间域’指的是图像平面本身,在空间域内处理图像的方法是直接对图像的像素进行处理。空间域处理方法分为两种:灰度级变换、空间滤波。空间域技术直接对像素进行操作其表达式为: g(x,y)=T[f(x,y)] 其中f(x,y)为输入图像,g(x,y)为输出图像,T是对图像f进行处理的操作符,定义在点(x,y)的指定领域内。 定义点(x,y)的空间邻近区域的主要方法是,使用中心位于(x,y)的正方形或长方形区域。此区域的中心从原点(如左上角)开始逐像素点移动,在移动的同时,该区域会包含不同的领域。T应用于每个位置(x,y),以便在该位置得到输出图像g。在计算(x,y)处的g值时,只使用该领域的像素。 灰度变换T的最简单形式是使用领域大小为1×1,此时,(x,y)处的g值仅由f在该点处的亮度决定,T也变为一个亮度或灰度级变化函数。当处理单设(灰度)图像时,这两个术语可以互换。由于亮度变换函数仅取决于亮度的值,而与(x,y)无关,所以亮度函数通常可写做如下所示的简单形式: s=T(r) 其中,r表示图像f中相应点(x,y)的亮度,s表示图像g中相应点(x,y)的亮度。 核心函数是imhist,其基本语法为: h=imhist(f,b) 其中,f为输入图像,h为其直方图h(),b是用于形成直方图像的灰度级的个数。如果b未包含在此变量中,则默认值为256.如要处理一幅uint8

绘制数字图像灰度直方图实验报告MATLAB实现

数字图像处理 实验报告 实验一绘制直方图 学号 姓名 日期

实验一绘制直方图 一、实验内容 1、编程绘制数字图像的直方图。 2、直方图均衡处理。 二、实验步骤 1、设计思想或者流程图。 灰度直方图是将数字图像的所有像素,按照灰度值的大小,统计其所出现的频度。通常,灰度直方图的横坐标表示灰度值,纵坐标为半个像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。 直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。从而达到清晰图像的目的。 2、源程序并附上注释。 clear all %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('1.jpg');%读入JPG彩色图像文件 imshow(PS)%显示出来 title('输入的彩色JPG图像') imwrite(rgb2gray(PS),'PicSampleGray.bmp');%将彩色图片灰度化并保存 PS=rgb2gray(PS);%灰度化后的数据存入数组 %二,绘制直方图 [m,n]=size(PS);%测量图像尺寸参数 GP=zeros(1,256);%预创建存放灰度出现概率的向量for k=0:255 GP(k+1)=length(find(PS==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置 end figure,bar(0:255,GP,'g')%绘制直方图 title('原图像直方图') xlabel('灰度值') ylabel('出现概率') %三,直方图均衡化 S1=zeros(1,256); for i=1:256 for j=1:i S1(i)=GP(j)+S1(i);%计算Sk end end S2=round((S1*256)+0.5);%将Sk归到相近级的灰度for i=1:256 GPeq(i)=sum(GP(find(S2==i)));%计算现有每个灰度级出现的概率

用matlab实现图像灰度变换课程设计

课程设计报告册 课程名称: MATLAB课程设计 课题名称:灰度变换增强 专业班级: 姓名: Bob Wang 学号: 15164 课程设计主要场所:信息楼220 时间: 指导教师:成绩:

前言 数字图像处理技术是20世界60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或变成以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。 MATLAB是一种以矩阵运算为基础的交互式程序语言,能够满足科学、工程计算和绘图的要求,与其它计算机语言相比,其特点是简洁和智能化,适应科技专业人员的思维方式和书写习惯,使得编程和调试效率大大提高。我们学习掌握MATLAB,也可以说是在科学工具上与国际接轨。

目录 一、课程设计目的 (2) 二、设计任务及容 (2) 三、课题设计实验条件 (3) 四、涉及知识 (3) 五、具体设计过程及调试 (4) 5.1、图像的读入和显示 5.1.1、打开图像 (4) 5.1.2、显示原图像 (5) 5.1.3、图像灰度处理 (7) 5.1.4、显示灰阶后图像 (8) 5.2、直方图均衡化 5.2.1、生成直方图 (10) 5.2.2、直方图均衡化 (12) 5.3、灰度变换 5.3.1、线性变换 (9) 5.3.2、分段线性变换 (9) 5.3.3、非线性变换.................................... (9) 六、心得体会 (17) 七、参考文献 (18) 八、程序清单 (19)

实验-数字图像的直方图统计

实验二数字图像的直方图统计 一、实验目的 1.了解对灰度图像进行直方图统计的基本原理; 2.掌握用VC编程实现直方图统计的方法; 3.在微机上调试程序; 5. 分析数字图像直方图的特点。 二、实验原理 图像的直方图 图像的(灰度统计)直方图是一个一维的离散函数。它的定义为: 设s k为图像f(x,y)的第k级灰度值,n k是f(x,y)中具有灰度值s k的象素的个数,n是图像象素总数,则: p s(s k)= n k/n k=0,1, ,L-1 称为图像f(x,y)的直方图。 这里p s(s k)代表原始图中第k个灰度级的出现概率。以n k为自变量,以p s(s k)为函数,得到的曲线就是图像的直方图,在实际中常常直接将对第k个灰度级的统计值n k作为图像的直方图。 它提供了原图灰度值的分布情况,也可以说给出了一幅图所有灰度值的整体描述。 对灰度图像进行直方图统计的程序流程图如图2-1所示。 图2-1 灰度图像直方图统计流程 三、实验前准备 1.预习本实验中关于数字图像直方图统计的有关内容; 2. 预习VC中添加对话框的步骤和方法; 3.了解本实验的目的和实验内容。 四、实验内容 1.在实验一的基础上读入并显示一幅数字图像; 2.编写对灰度图像进行直方图统计的程序,并将结果显示在屏幕上。 五、实验报告要求 1.总结对灰度图像进行直方图统计的过程,比较不同的图像其直方图特性;

2.对实验结果进行分析。 六、参考步骤和程序 在实验一的基础上,进行如下操作: 1、点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为 ID_HIST,对话框名称改为“直方图” 2、在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为 ID_HIST。这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID 设为IDC_HISTSHOW; 3、快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选 WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。 4、在Hist.h文件“public:”下面输入如下变量定义: LONG m_lCount[256]; char* m_lpDIBBits; LONG m_lWidth; LONG m_lHeight; int m_iIsDraging; CDlgIntensity(CWnd* pParent = NULL); 5、打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here” 前将如下代码拷贝进去: unsigned char* lpSrc; LONG i; LONG j; 6、在“// TODO: Add extra initialization here”后将如下代码拷贝进去: CWnd* pWnd=GetDlgItem(IDC_HISTSHOW); pWnd->GetClientRect(m_MouseRect); pWnd->ClientToScreen(&m_MouseRect); CRect rect; GetClientRect(rect); ClientToScreen(&rect); m_MouseRect.top-=rect.top; m_MouseRect.left-=rect.left; m_MouseRect.top+=25; m_MouseRect.left+=10; m_MouseRect.bottom=m_MouseRect.top+255; m_MouseRect.right=m_MouseRect.left+256; for(i=0;i<256;i++) { m_lCount[i]=0;

图像灰度变换增强

图像灰度变换增强 摘要:灰度变换是基于点操作的增强方法,它将每一个像素的灰度值按照一定的数学变换公式转换为一个新的灰度值,如增强处理中的对比度增强。对比度增强可以采用线性拉伸和非线性拉伸。线性拉伸可以将原始输入图像中的灰度值不加区别地扩展。如果要求对局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理时,采用分段线性拉伸。非线性拉伸常采用对数扩展和指数扩展。对数扩展拉伸低亮度去,压缩高亮度区;指数扩展拉伸了高亮区,压缩了低亮度区。 关键词:图像增强,灰度变换,线性变换,分段线性变换,非线性变换 一. 概述 影响系统图像清晰程度的因素很多,例如室外光照度不够均匀就会造成图像灰度过于集中;由CCD (摄像头)获得的图像经过A/D (数/模转换,该功能在图像系统中由数字采集卡来实现)转换、线路传送都会产生噪声污染等等。因此图像质量不可避免的降低了,轻者表现为图像不干净,难于看清细节;重者表现为图像模糊不清,连概貌也看不出来。因此,在对图像进行分析之前,必须要对图像质量进行改善,一般情况下改善的方法有两类:图像增强和图像复原。图像增强不考虑图像质量下降的原因,只将图像中感兴趣的特征有选择的突出,而衰减不需要的特征,它的目的主要是提高图像的可懂度。图像复原技术与增强技术不同,它需要了解图像质量下降的原因,首先要建立"降质模型",再利用该模型,恢复原始图像。 根据图像增强处理过程所在的空间不同,图像增强可分为空余增强法和频域增强法两大类。频域增强是在图像的某种变换域内,对图像的变换系数值进行运算,即作某种修正,然后通过逆变换获得增强了的图像。空域增强则是指直接在图像所在的二维空间进行增强处理,既增强构成图像的像素。空域增强法主要有灰度变换增强,直方图增强,图像平滑和图像锐化等。 图像的灰度变换处理是图像增强处理技术中一种非常基础,直接的空间域图像处理法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 二. 灰度变换处理 灰度变换的过程可表示为:)],([),(y x f T y x g ,它是指将输入图像中每个像素

四、灰度直方图是数字图像处理的重要工作。请简述灰度直方图规定化

四、灰度直方图是数字图像处理的重要工作。请简述灰度直方图规定化、均衡化的基本原理。并以分辨率为5*4,图像的深度6bit 的图像为例,自举例说明直方图均衡化的计算过程。 解答: 数字图像的直方图是作为图像每一个灰度级的统计概率分布"它提供了图像灰度分布的概貌,直方图增强技术正是利用修改给定图像直方图的方法来增强图像的,最后得到的图像增强程度取决于我们所采用的直方图。令变量r 和s 分别代表图像增强前后的像素灰度级,相应灰度级分布的概率密度分别为()r P r 和()s P s 。 为讨论方便,假设像素灰度值已经归一化在区间[0,1],在灰度级坐标中r=0表示黑,r=1表示白。对区间[0,1]内任一个r 值按变换函数: s = T(r) (1) 进行变换,T (r )满足两个条件:(1)单值单调递增函数;(2) 0≤T (r )≤1。 条件(1)使灰度级保持从黑到白的次序,条件(2)保证映射变换后像素灰度值在允许的范围内。从s 到r 的反变换为:1()r T s -=,0≤s ≤1。 (2) 同样,规定变量s 也满足条件(1)和(2)。由概率理论知,若()r P r 和变换函数s = T(r) 已知,1()r T s -=是单值单调增加函数,则有: 1() ()[P () ]s r r T s dr P s r ds -== (3) 直方图增强技术就是通过变换函数T (r )控制图像灰度级的概率密度函数而改变图像的外貌。 对于连续图像,变换函数为: ()(),01r r s T r P r dr r ==≤≤? (4) 此式右边为累积分布函数(CDF ),由该式对r 求导有: ()r ds P r dr = (5) 代入(3)得到: 1()1 ()[() ]1,01() r r T s r P s P r s P r -===≤≤ (6) 这说明,在变换后变量s 在定义域内, ()s P s 是均匀概率密度。在图像增强意义上,这 相当于像素的动态范围增加。 对于离散图像,灰度级k r 的概率值为: (),01,0,1,2, (1) r k k n P r r k L n = ≤≤=- (7) 其中,n 表示图像中像素的总数,k n 是在图像中出现这种灰度级的次数,L 表示灰度级

灰度直方图

1.灰度直方图 灰度直方图(histogram)是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。如下图所示,灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。 从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数pdf(probability density function),而概率分布函数就是直方图的累积和,即概率密度函数的积分,如下图所示:

若直接从代表每种灰度的象素数目的直方图来观察,常用如下的表示: dr r dP r p dr r p r P r )()(, )()(0 = =?∑???===≈ ===== =k i i k k k k k r r n n r P n n r p n r n A dA r p dr dr r H A r P A dr r dA A r H r p dr r H A dr r H r A 00 0000255 00 )()()(1)(1 )(,/)()()() ()(, )()(,而概率分布函数,则概率密度的象素数为,灰度为若记象素总数为,时,在离散情况下,取概率密度象素总数一幅图象的总面积,或

灰度直方图的计算是很简单的,依据定义,若图象具有L(通常L=256, 即8位灰度级)级灰度,则大小为MxN的灰度图象f(x,y)的灰度直方图hist[0…L-1]可用如下计算获得: 1. 1.初始化 hist[k]=0 ; k=0,…,L-1 2. 2.统计 hist[f(x,y)]++ ; x, y =0,…,M-1, 0,…,N-1 3. 3.标准化 hist[f(x,y)]/=M*N 2.直方图均衡化 直方图均衡化是通过灰度变换将一幅图象转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。 设灰度变换s=f(r)为斜率有限的非减连续可微函数,它将输入图象A(x,y) 转换为输出图象B(x,y),输入图象的直方图为H A (r),输出图象的直方图为H B (s), 则它们的关系可由如下过程导出:

图像处理灰度变换实验

一. 实验名称:空间图像增强(一) 一.实验目的 1.熟悉和掌握利用matlab工具进行数字图像的读、写、显示、像素处理等数字图像处理的基本步骤和流程。 2.熟练掌握各种空间域图像增强的基本原理及方法。 3.熟悉通过灰度变换方式进行图像增强的基本原理、方法和实现。 4.熟悉直方图均衡化的基本原理、方法和实现。 二.实验原理 (一)数字图像的灰度变换 灰度变换是图像增强的一种经典而有效的方法。灰度变换的原理是将图像的每一个像素的灰度值通过一个函数,对应到另一个灰度值上去从而实现灰度的变换。常见的灰度变换有线性灰度变换和非线性灰度变换,其中非线性灰度变换包括对数变换和幂律(伽马)变换等。 1、线性灰度变换 1)当图像成像过程曝光不足或过度,或由于成像设备的非线性和图像记录设备动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清,图像缺少层次。这时,可将灰度范围进行线性的扩展或压缩,这种处理过程被称为图像的线性灰度变换。对灰度图像进行线性灰度变换能将输入图像的灰度值的动态范围按线性关系公式拉伸扩展至指定范围或整个动态范围。 2)令原图像f(x,y)的灰度范围为[a,b],线性变换后得到图像g(x,y),其灰度范围为[c,d],则线性灰度变换公式可表示为

a y x f b y x f a b y x f c c a y x f a b c d d y x g <≤≤>?????+---=),(),(),(, ,]),([,),( (1) 由(1)式可知,对于介于原图像f (x,y )的最大和最小灰度值之间的灰度值,可通过线性变换公式,一一对应到灰度范围[c,d]之间,其斜率为(d-c)/(b-a);对于小于原图像的最小灰度值或大于原图像的最大灰度值的灰度值,令其分别恒等于变换后的最小和最大灰度值。变换示意图如图1所示。 图1 线性灰度变换示意图 当斜率大于一时,变换后的灰度值范围得到拉伸,图像对比度得到提高;当斜率小于一时,变换后的灰度值范围被压缩,最小与最大灰度值的差变小,图像对比度降低;当斜率等于一时,相当于对图像不做变换。 3)由上述性质可知,线性灰度变换能选择性地加强或降低特定灰度值范围内的对比度,故线性灰度变换同样也可做分段处理:对于有价值的灰度范围,将斜率调整为大于一,用于图像细节;对于不重要的灰度范围,将图像压缩,降低对比度,减轻无用信息的干扰。最常用的分段线性变换的方法是分三段进行线性变换。 在原图像灰度值的最大值和最小值之间设置两个拐点,在拐点处,原图像的灰度值分别为r 1,r 2,该拐点对应的变换后的图像的灰度值分别为s 1,s 2,另外,取原图像灰度的最小值为r 0,最大值为r m ,对应的变换后的灰度值分别为s 0,s m 。

数字图像实验报告二图像的灰度变换与直方图均衡

实验二图像的灰度变换与直方图均衡 一、实验目的 1.理解图像灰度变换与直方图均衡的定义; 2.掌握图像灰度变换与直方图均衡化的方法; 3.学会利用matlab编程实现灰度变换和直方图均衡的方法。 二、实验内容 1. 利用matlab语言直接编程实现图像的对比度调整; 2. 利用matlab语言编程实现图像的反转; 3. 利用matlab语言直接编程实现图像的二值化; 4. 利用matlab语言直接编程实现图像的直方图均衡化处理。 三、实验步骤 (一)利用matlab语言直接编程实现图像的对比度调整 实验代码如下: A=imread('E:\实验报告\数字图像处理实验报告\数字图像实验报告二通信五班韩奇20110803520\lena.jpg'); I=double(A); J=I*0.5+40; A1=uint8(J); figure(1);subplot(1,2,1),imshow(A); subplot(1,2,2),imshow(A1); J=I*1+40; A1=uint8(J); figure(2);subplot(1,2,1),imshow(A); subplot(1,2,2),imshow(A1); J=I*3+40; A1=uint8(J); figure(3);subplot(1,2,1),imshow(A); subplot(1,2,2),imshow(A1); J=exp(I); A1=uint8(J); figure(4);subplot(1,2,1),imshow(A);

subplot(1,2,2),imshow(A1); 生成图像如下:

相关文档
相关文档 最新文档