数字图像处理的代码

数字图像处理的代码
数字图像处理的代码

using System;

using System.Collections.Generic;

using https://www.360docs.net/doc/5e14587149.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace final

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

Bitmap recBitmap;

private void openToolStripMenuItem_Click(object sender, EventArgs e)

{

OpenFileDialog openFileDlg = new OpenFileDialog();

openFileDlg.ShowDialog();

String fileName = openFileDlg.FileName;

recBitmap = new Bitmap(fileName);

recPicBox.Image = recBitmap;

}

private void rToolStripMenuItem_Click(object sender, EventArgs e)

{

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int r = c.R;

Color cc = Color.FromArgb(r, 0, 0);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void gToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int g = c.G;

Color cc = Color.FromArgb(0, g, 0);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void bToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int b = c.B;

Color cc = Color.FromArgb(0, 0, b);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void grayToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int r = c.R;

int g = c.G;

int b = c.B;

int gray = (r + g + b) / 3;

Color cc = Color.FromArgb(gray, gray, gray);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void vToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

decBitmap.SetPixel(width - i - 1, j, c);

}

decPicBox.Image = decBitmap;

}

private void gToolStripMenuItem1_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

decBitmap.SetPixel(i, height - j - 1, c);

}

decPicBox.Image = decBitmap;

}

private void vtToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int vtran = i - width / 3;

if (vtran < 0)

vtran = 0;

decBitmap.SetPixel(vtran, j, c);

}

decPicBox.Image = decBitmap;

}

private void gtToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int vtran = j - height / 3;

if (vtran < 0)

vtran = 0;

decBitmap.SetPixel(i, vtran, c);

}

decPicBox.Image = decBitmap;

}

private void oppsiteToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int r = c.R;

int g = c.G;

int b = c.B;

Color cc = Color.FromArgb(255 - r, 255 - g, 255 - b);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void graytransToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int r = c.R;

int g = c.G;

int b = c.B;

int nr, ng, nb;

if (i < width / 3)

{

nr = (int)(r * 0.3);

ng = (int)(g * 0.3);

nb = (int)(b * 0.3);

}

else if (i < width * 2 / 3)

{

nr = (int)(r * 0.6);

ng = (int)(g * 0.6);

nb = (int)(b * 0.6);

}

else

{

nr = r;

ng = g;

nb = b;

}

Color cc = Color.FromArgb(nr, ng, nb);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void averagebarToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

int[] n = new int[256];

int[] s = new int[256];

int L=256;

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

{

n[i] = 0;

s[i] = 0;

}

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

for (int j = 0; j < height; j++)

{

Color c = recBitmap.GetPixel(i, j);

int gray = (c.R + c.G + c.B) / 3;

n[gray]++;

}

for(int k=0; k<=L-1; k++)

{

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

s[k] = s[k] + n[i];

s[k] = (L-1) * s[k] / (width * height);

s[k] = (int)(s[k] + 0.5);

}

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

for(int j=0; j

{

Color c = recBitmap.GetPixel(i,j);

int r = (c.R + c.G + c.B)/3;

int rs = s[r];

Color cc = Color.FromArgb(rs,rs,rs);

decBitmap.SetPixel(i,j,cc);

}

decPicBox.Image = decBitmap;

}

private void mfilterToolStripMenuItem_Click(object sender, EventArgs e) {

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

for (int i = 1; i < width - 1; i++)

for (int j = 1; j < height - 1; j++)

{

int mid=0;

int [] a=new int[9];

a[0] = (recBitmap.GetPixel(i - 1, j-1).R +recBitmap.GetPixel(i - 1, j-1).G + recBitmap.GetPixel(i - 1, j-1).B) / 3;

a[1] = (recBitmap.GetPixel(i, j-1).R + recBitmap.GetPixel(i, j-1).G + recBitmap.GetPixel(i, j-1).B) / 3;

a[2] = (recBitmap.GetPixel(i+1, j-1).R + recBitmap.GetPixel(i+1, j-1).G + recBitmap.GetPixel(i+1, j-1).B) / 3;

a[3] = (recBitmap.GetPixel(i - 1, j).R + recBitmap.GetPixel(i - 1, j).G + recBitmap.GetPixel(i - 1, j).B) / 3;

a[4] = (recBitmap.GetPixel(i, j).R + recBitmap.GetPixel(i, j).G + recBitmap.GetPixel(i, j).B) / 3;

a[5] = (recBitmap.GetPixel(i + 1, j).R + recBitmap.GetPixel(i + 1, j).G + recBitmap.GetPixel(i + 1, j).B) / 3;

a[6] = (recBitmap.GetPixel(i - 1, j+1).R + recBitmap.GetPixel(i - 1, j+1).G + recBitmap.GetPixel(i - 1, j+1).B) / 3;

a[7] = (recBitmap.GetPixel(i, j+1).R + recBitmap.GetPixel(i, j+1).G + recBitmap.GetPixel(i, j+1).B) / 3;

a[8] = (recBitmap.GetPixel(i + 1, j+1).R + recBitmap.GetPixel(i + 1, j+1).G + recBitmap.GetPixel(i + 1, j+1).B) / 3;

Array.Sort(a);

mid=a[4];

Color cc = Color.FromArgb(mid, mid, mid);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void afilterToolStripMenuItem_Click(object sender, EventArgs e)

{

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

for (int i = 1; i < width - 1; i++)

for (int j = 1; j < height - 1; j++)

{

int avg;

int fir = (recBitmap.GetPixel(i - 1, j).R + recBitmap.GetPixel(i - 1, j).G + recBitmap.GetPixel(i - 1, j).B) / 3;

int sec = (recBitmap.GetPixel(i, j).R + recBitmap.GetPixel(i, j).G +

recBitmap.GetPixel(i, j).B) / 3;

int thr = (recBitmap.GetPixel(i + 1, j).R + recBitmap.GetPixel(i + 1, j).G + recBitmap.GetPixel(i + 1, j).B) / 3;

avg=(fir+sec+thr)/3;

Color cc = Color.FromArgb(avg, avg, avg);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

private void sharpenToolStripMenuItem_Click(object sender, EventArgs e)

{

int width = recBitmap.Width;

int height = recBitmap.Height;

Bitmap decBitmap = new Bitmap(width, height);

for (int i = 1; i < width - 1; i++)

for (int j = 1; j < height - 1; j++)

{

int filter=0;

int [] a=new int[9];

a[0] = (recBitmap.GetPixel(i - 1, j-1).R +recBitmap.GetPixel(i - 1, j-1).G + recBitmap.GetPixel(i - 1, j-1).B) / 3;

a[3] = (recBitmap.GetPixel(i, j).R + recBitmap.GetPixel(i, j).G + recBitmap.GetPixel(i, j).B) / 3;

a[1] = (recBitmap.GetPixel(i, j-1).R + recBitmap.GetPixel(i, j-1).G + recBitmap.GetPixel(i, j-1).B) / 3;

a[2] = (recBitmap.GetPixel(i - 1, j).R + recBitmap.GetPixel(i - 1, j).G + recBitmap.GetPixel(i - 1, j).B) / 3;

filter = (Math.Abs(a[3] - a[0]) + Math.Abs(a[1]-a[2]))/2;

Color cc = Color.FromArgb(filter, filter, filter);

decBitmap.SetPixel(i, j, cc);

}

decPicBox.Image = decBitmap;

}

}

}

数字图像处理实验1

实验一 实验内容和步骤 练习图像的读取、显示和保存图像数据,步骤如下: (1)使用命令figure(1)开辟一个显示窗口 (2)读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内显示、二值图像和灰度图像,注上文字标题。 (3)保存转换后的灰度图像和二值图像 (4)在同一个窗口显示转换后的灰度图像的直方图 I=imread('BaboonRGB.bmp'); figure,imshow(I); I_gray=rgb2gray(I); figure,imshow(I_gray); I_2bw=Im2bw(I_gray); figure,imshow(I_2bw); subplot(1,3,1),imshow(I),title('RGB图像'); subplot(1,3,2),imshow(I_gray),title('灰度图像'); subplot(1,3,3),imshow(I_2bw),title('二值图像'); imwrite(I_gray,'Baboongray.png'); imwrite(I_2bw,'Baboon2bw.tif'); figure;imhist(I_gray);

RGB 图 像灰度图 像二值图 像 050100150200250 500 1000 1500 2000 2500 3000

(5)将原RGB 图像的R 、G 、B 三个分量图像显示在figure(2)中,观察对比它们的特点,体会不同颜色所对应的R 、G 、B 分量的不同之处。 [A_RGB,MAP]=imread('BaboonRGB.bmp'); subplot(2,2,1),imshow(A_RGB),title('RGB'); subplot(2,2,2),imshow(A_RGB(:,:,1)),title('R'); subplot(2,2,3),imshow(A_RGB(:,:,2)),title('G'); subplot(2,2,4),imshow(A_RGB(:,:,3)),title('B'); (6)将图像放大1.5倍,插值方法使用三种不同方法,在figure(3)中显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;A=imread('BaboonRGB.bmp'); figure(3),imshow(A),title('原图像'); B=imresize(A,1.5,'nearest'); figure(4),imshow(B),title('最邻近法') C=imresize(A,1.5,'bilinear'); ; figure(5),imshow(C),title('双线性插值'); D=imresize(A,1.5,'bicubic'); figure(6),imshow(D),title('双三次插值 '); RGB R G B

数字图像处理实验报告

数字图像处理实验报告 实验一数字图像基本操作及灰度调整 一、实验目的 1)掌握读、写图像的基本方法。 2)掌握MATLAB语言中图像数据与信息的读取方法。 3)理解图像灰度变换处理在图像增强的作用。 4)掌握绘制灰度直方图的方法,理解灰度直方图的灰度变换及均衡化的方 法。 二、实验内容与要求 1.熟悉MATLAB语言中对图像数据读取,显示等基本函数 特别需要熟悉下列命令:熟悉imread()函数、imwrite()函数、size()函数、Subplot()函数、Figure()函数。 1)将MATLAB目录下work文件夹中的forest.tif图像文件读出.用到imread, imfinfo 等文件,观察一下图像数据,了解一下数字图像在MATLAB中的处理就是处理一个矩阵。将这个图像显示出来(用imshow)。尝试修改map颜色矩阵的值,再将图像显示出来,观察图像颜色的变化。 2)将MATLAB目录下work文件夹中的b747.jpg图像文件读出,用rgb2gray() 将其 转化为灰度图像,记为变量B。 2.图像灰度变换处理在图像增强的作用 读入不同情况的图像,请自己编程和调用Matlab函数用常用灰度变换函数对输入图像进行灰度变换,比较相应的处理效果。 3.绘制图像灰度直方图的方法,对图像进行均衡化处理 请自己编程和调用Matlab函数完成如下实验。 1)显示B的图像及灰度直方图,可以发现其灰度值集中在一段区域,用 imadjust函 数将它的灰度值调整到[0,1]之间,并观察调整后的图像与原图像的差别,调整后的灰

度直方图与原灰度直方图的区别。 2) 对B 进行直方图均衡化处理,试比较与源图的异同。 3) 对B 进行如图所示的分段线形变换处理,试比较与直方图均衡化处理的异同。 图1.1 分段线性变换函数 三、实验原理与算法分析 1. 灰度变换 灰度变换是图像增强的一种重要手段,它常用于改变图象的灰度范围及分布,是图象数字化及图象显示的重要工具。 1) 图像反转 灰度级范围为[0, L-1]的图像反转可由下式获得 r L s --=1 2) 对数运算:有时原图的动态范围太大,超出某些显示设备的允许动态范围, 如直接使用原图,则一部分细节可能丢失。解决的方法是对原图进行灰度压缩,如对数变换: s = c log(1 + r ),c 为常数,r ≥ 0 3) 幂次变换: 0,0,≥≥=γγc cr s 4) 对比拉伸:在实际应用中,为了突出图像中感兴趣的研究对象,常常要求 局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段线性拉伸: 其对应的数学表达式为:

数字图像处理习题2018

数字图像处理习题集 1图像的概念及分类; “图”是物体透射或者反射光的分布;“像”是人的视觉系统接收图的信息而在大脑中形成的印象或认识。 图像通常是所表示对象信息的浓缩或概括,因此,“一幅图像是关于目标的一个不完全、不精确但恰当的表示。” 图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼而产生视知觉的实体。 学科定义:给定条件下被摄目标电磁波性质<反射、辐射、透射)的一种表现形式。 广义上:图像是对所表示物体的信息描述。 图像分类 二值图像:图像中只能取值为0或1。 灰度图像: 单色图像,只包含亮度信息。 彩色图像:3波段单色图像,每波段代表不同颜色,通常为红色、绿色、蓝色。 2说明图像技术的层次,并叙述各层次的主要研究内容; 图像技术之图像处理

数字图像处理点运算和直方图处理

实验1 点运算和直方图处理 一、实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理。 3. 进一步理解利用点操作这一方法进行图像处理的特点。 4. 掌握利用Matlab图像工具箱进行直方图均衡化的基本方法。 二、实验的硬件、软件平台 硬件:计算机 软件:操作系统:WINDOWS 7 应用软件:MATLAB 三、实验内容及步骤 1. 了解Matlab图像工具箱的使用。 2. 利用Matlab图像工具箱对图像进行点操作,要求完成下列3个题目中 的至少2个。 ⑴图1灰度范围偏小,且灰度偏低,改正之。 ⑵图2暗处细节分辨不清,使其能看清楚。 ⑶图3亮处细节分辨不清,使其能看清楚。 图1 图2 图3 3. 给出处理前后图像的直方图。 4. 利用MatLab图像处理工具箱中函数对以上图像进行直方图均衡化操 作,观察结果。 四、思考题 1. 点操作能完成哪些图像增强功能? 2. 直方图均衡化后直方图为何并不平坦?为何灰度级会减少? 五、实验报告要求

1.对点操作的原理进行说明。 2.给出程序清单和注释。 3.对处理过程和结果进行分析(包括对处理前后图像的直方图的分析)。 实验代码以及解读 点操作: I = imread('POINT1.BMP')。 %读入图像 j=rgb2gray(I)。%将图像转为灰度图像 INFO=IMFINFO('POINT1.BMP') %获取图片的格式、尺寸、颜色数量、修改时间等信息[l,r]=size(j)。%图片大小 figure。%建立一个图形框 subplot(221) imshow(j) %在两行两列的第一个位置放置图片j title('POINT1.BMP') %给该图片加上标题POINT1.BMP for m=1:l for n=1:r %从第一个像素循环到最后一个像素p1(m,n)=j(m,n)*1.2。%把各点乘上1.2得到p1图 end end for m=1:l for n=1:r p2(m,n)=j(m,n)*2。%%把各点乘上2得到p2图 end end for m=1:l for n=1:r p3(m,n)=j(m,n)*2+50。%把各点乘上2再加50得到p2图 end end subplot(222) imshow(p1) title('j(m,n)*1.2') %p1图放在第二个位置且冠名j(m,n)*1.2 subplot(223) imshow(p2) title('j(m,n)*2') %p1图放在第三个位置且冠名j(m,n)* 2 subplot(224) imshow(p3) title('j(m,n)*2+50') %p1图放在第四个位置且冠名j(m,n)*2+50 figure。%建立一个新的窗口并且依次显示以上四个图的直方图

武汉科技大学 数字图像处理实验报告

二○一四~二○一五学年第一学期电子信息工程系 实验报告书 班级:电子信息工程(DB)1102班姓名 学号: 课程名称:数字图像处理 二○一四年十一月一日

实验一图像直方图处理及灰度变换(2学时) 实验目的: 1. 掌握读、写、显示图像的基本方法。 2. 掌握图像直方图的概念、计算方法以及直方图归一化、均衡化方法。 3. 掌握图像灰度变换的基本方法,理解灰度变换对图像外观的改善效果。 实验内容: 1. 读入一幅图像,判断其是否为灰度图像,如果不是灰度图像,将其转化为灰度图像。 2. 完成灰度图像的直方图计算、直方图归一化、直方图均衡化等操作。 3. 完成灰度图像的灰度变换操作,如线性变换、伽马变换、阈值变换(二值化)等,分别使用不同参数观察灰度变换效果(对灰度直方图的影响)。 实验步骤: 1. 将图片转换为灰度图片,进行直方图均衡,并统计图像的直方图: I1=imread('pic.jpg'); %读取图像 I2=rgb2gray(I1); %将彩色图变成灰度图 subplot(3,2,1); imshow(I1); title('原图'); subplot(3,2,3); imshow(I2); title('灰度图'); subplot(3,2,4); imhist(I2); %统计直方图 title('统计直方图'); subplot(3,2,5); J=histeq(I2); %直方图均衡 imshow(J); title('直方图均衡'); subplot(3,2,6); imhist(J); title('统计直方图');

原 图 灰度图 01000 2000 3000统计直方图 100200直方图均衡 0统计直方图 100200 仿真分析: 将灰度图直方图均衡后,从图形上反映出细节更加丰富,图像动态范围增大,深色的地方颜色更深,浅色的地方颜色更前,对比更鲜明。从直方图上反应,暗部到亮部像素分布更加均匀。 2. 将图片进行阈值变换和灰度调整,并统计图像的直方图: I1=imread('rice.png'); I2=im2bw(I1,0.5); %选取阈值为0.5 I3=imadjust(I1,[0.3 0.9],[]); %设置灰度为0.3-0.9 subplot(3,2,1); imshow(I1); title('原图'); subplot(3,2,3); imshow(I2); title('阈值变换'); subplot(3,2,5); imshow(I3); title('灰度调整'); subplot(3,2,2); imhist(I1); title('统计直方图'); subplot(3,2,4);

数字图像处理在医学上的应用

数字图像处理在医学上的应用 1 引言 自伦琴1895年发现X射线以来,在医学领域可以用图像的形式揭示更多有用的医学信息,医学的诊断方式也发生了巨大的变化。随着科学技术的不断发展,现代医学已越来越离不开医学图像的信息处理, 医学图像在临床诊断、教学科研等方面有重要的作用。目前的医学图像主要包括CT (计算机断层扫描) 图像、MRI( 核磁共振)图像、B超扫描图像、数字X 光机图像、X 射线透视图像、各种电子内窥镜图像、显微镜下病理切片图像等。但是由于医学成像设备的成像机理、获取条件和显示设备等因素的限制, 使得人眼对某些图像很难直接做出准确的判断。计算机技术的应用可以改变这种状况,通过图像变换和增强技术来改善图像的清晰度, 突出重要的内容,抑制不重要的内容,以适应人眼的观察和机器的自动分析,这无疑大大提高了医生临床诊断的准确性和正确性。 数字图像处理的基本方法就是图像复原与图像增强。图像复原就是尽可能恢复原始图像的信息量,尽量保真。数字化的一个基本特征是它所固有的噪声。噪声可视为围绕真实值的随机波动, 是降低图像质量的主要因素。图像复原的一个基本问题就是消除噪声。图像增强就是通过利用人的视觉系统的生理特性更好地分辨图像细节。 与其他领域的应用相比较,医学影像等卫生领域信息更具独特性,医学图像较普通图像纹理更多,分辨率更高,相关性更大,存储空间要更大,并且为严格确保临床应用的可靠性,其压缩、分割等图像预处理、图像分析及图像理解等要求更高。医学图像处理跨计算机、数学、图形学、医学等多学科研究领域,医学图像处理技术包括图像变换、图像压缩、图像增强、图像平滑、边缘锐化、图像分割、图像识别、图像融合等等。在此联系数字图像处理的相关理论知识和步骤设计规划系统采集和处理的具体流程同时充分考虑到图像采集设备的拍摄效果以及最终处理结果的准确性,例举了基于图像处理技术的人体手指甲襞处微血管管袢直径的测量方法。 2人体微血管显微图像的采集 人体微血管显微图像的采集采用了如图1所示的显微光学系统和图像采集系统主要由透镜模组滤镜模组光源系统电荷耦合器件以及图像采集卡等构成。 图1显微光学系统与图像采集系统示意图

数字图像处理实验 实验二

实验二MATLAB图像运算一、实验目的 1.了解图像的算术运算在数字图像处理中的初步应用。 2.体会图像算术运算处理的过程和处理前后图像的变化。 二、实验步骤 1.图像的加法运算-imadd 对于两个图像f x,y和 (x,y)的均值有: g x,y=1 f x,y+ 1 (x,y) 推广这个公式为: g x,y=αf x,y+β (x,y) 其中,α+β=1。这样就可以得到各种图像合成的效果,也可以用于两张图像的衔接。说明:两个示例图像保存在默认路径下,文件名分别为'rice.png'和'cameraman.tif',要求实现下图所示结果。 代码: I1 = imread('rice.png'); I2 = imread('cameraman.tif'); I3 = imadd(I1, I2,'uint8'); I4 = imadd(I1, I2,'uint16'); subplot(2, 2, 1), imshow(I1), title('?-ê?í???1'); subplot(2, 2, 2), imshow(I2), title('?-ê?í???2'); subplot(2, 2, 3), imshow(I3), title('8??í?????ê?'); subplot(2, 2, 4), imshow(I4), title('16??í?????ê?'); 结果截图:

2.图像的减法运算-imsubtract 说明: 背景图像可通过膨胀算法得到background = imopen(I,strel('disk',15));,要求实现下图所示结果。 示例代码如下: I1 = imread('rice.png'); background = imerode(I1, strel('disk', 15)); rice2 = imsubtract(I1, background); subplot(2, 2, 1), imshow(I1), title('?-ê?í???'); subplot(2, 2, 2), imshow(background), title('±3?°í???'); subplot(2, 2, 3), imshow(rice2), title('′|àíoóμ?í???'); 结果截图: 3.图像的乘法运算-immultiply

数字图像处理知识点

1、点运算是否会改变图像内像素点之间的空间位置关系? 点运算是一种像素的逐点运算,它与相邻的像素之间没有运算关系,点运算不会改变图像内像素点之间的空间位置关系。 2、对图像灰度的拉伸,非线性拉伸与分段线性拉伸的区别? 非线性拉伸不是通过在不同灰度值区间选择不同的线性方程来实现对不同灰度值区间的扩展与压缩,而是在整个灰度值范围内采用统一的非线性变换函数,利用函数的数学性质实现对不同灰度值区间的扩展与压缩。 3.图像获取即图像的数字化过程,包括扫描、采样和量化。 4.图像获取设备由5个部分组成:采样孔,扫描机构,光传感器,量化器和输出存储体。 5.采样间隔越大,所得图像像素数越少,空间分辨率低,质量差,严重时出现马赛克效应 6.采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量大 7.量化等级越多,所得图像层次越丰富,灰度分辨率高,图像质量好,但数据量大 8.量化等级越少,图像层次欠丰富,灰度分辨率低,会出现假轮廓现象,图像质量变差,但数据量小. 9.三种灰度插值方法—最近邻法、双线性插值法和三次内插法 10.图像增强的目的: 采用某种技术手段,改善图像的视觉效果,或将图像转换成更适合于人眼观察和机器分析识别的形式,以便从图像中获取更有用的信息。 11.空间域平滑滤波器方法分类: 1)局部平滑法 2) 超限像素平滑法 3) 灰度最相近的K个邻点平均法 4) 空间低通滤波法 12.图像平滑通过积分过程使得图像边缘模糊,图像锐化则通过微分而使图像边缘突出、清晰。 13.图像恢复和图像增强一样,都是为了改善图像视觉效果,以及便于后续处理。只是图像增强方法更偏向主观判断,而图像恢复则是根据图像畸变或退化原因,进行模型化处理 14. (1)成象系统的象差、畸变、带宽有限等造成图像图像失真; (2)由于成象器件拍摄姿态和扫描非线性引起的图像几何失真; (3)运动模糊,成象传感器与被拍摄景物之间的相对运动,引起所成图像的运动模糊;

数字图像处理实验报告

目录 实验一:数字图像的基本处理操作 (4) :实验目的 (4) :实验任务和要求 (4) :实验步骤和结果 (5) :结果分析 (8) 实验二:图像的灰度变换和直方图变换 (9) :实验目的 (9) :实验任务和要求 (9) :实验步骤和结果 (9) :结果分析 (13) 实验三:图像的平滑处理 (14) :实验目的 (14) :实验任务和要求 (14) :实验步骤和结果 (14) :结果分析 (18) 实验四:图像的锐化处理 (19) :实验目的 (19) :实验任务和要求 (19) :实验步骤和结果 (19) :结果分析 (21)

实验一:数字图像的基本处理操作 :实验目的 1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用; 2、实现图像的读取、显示、代数运算和简单变换。 3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。:实验任务和要求 1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分 成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。 2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分 别显示,注上文字标题。 3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换, 显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。 4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里 叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的 对应关系。 :实验步骤和结果 1.对实验任务1的实现代码如下: a=imread('d:\'); i=rgb2gray(a); I=im2bw(a,; subplot(1,3,1);imshow(a);title('原图像'); subplot(1,3,2);imshow(i);title('灰度图像'); subplot(1,3,3);imshow(I);title('二值图像'); subplot(1,3,1);imshow(a);title('原图像'); 结果如图所示:

数字图像处理——彩色图像实验报告

6.3实验步骤 (1)对彩色图像的表达和显示 * * * * * * * * * * * *显示彩色立方体* * * * * * * * * * * * * rgbcube(0,0,10); %从正面观察彩色立方体 rgbcube(10,0,10); %从侧面观察彩色立方 rgbcube(10,10,10); %从对角线观察彩色立方体 %* * * * * * * * * *索引图像的显示和转换* * * * * * * * * * f=imread('D:\Picture\Fig0604(a)(iris).tif'); figure,imshow(f);%f是RGB真彩图像 %rgb图像转换成8色索引图像,不采用抖动方式 [X1,map1]=rgb2ind(f,8,'nodither'); figure,imshow(X1,map1); %采用抖动方式转换到8色索引图像 [X2,map2]=rgb2ind(f,8,'dither'); figure,imshow(X2,map2); %显示效果要好一些 g=rgb2gray(f); %f转换为灰度图像 g1=dither(g);%将灰色图像经过抖动处理,转换打二值图像figure,imshow(g);%显示灰度图像 figure,imshow(g1);%显示抖动处理后的二值图像 程序运行结果:

彩色立方体原图 不采用抖动方式转换到8色索引图像采用抖动方式转换到8色索引图像 灰度图像抖动处理后的二值图像

(2)彩色空间转换 f=imread('D:\Picture\Fig0604(a)(iris).tif'); figure,imshow(f);%f是RGB真彩图像 %转换到NTSC彩色空间 ntsc_image=rgb2ntsc(f); figure,imshow(ntsc_image(:,:,1));%显示亮度信息figure,imshow(ntsc_image(:,:,2));%显示色差信息figure,imshow(ntsc_image(:,:,3));%显示色差信息 %转换到HIS彩色空间 hsi_image=rgb2hsi(f); figure,imshow(hsi_image(:,:,1));%显示色度信息figure,imshow(hsi_image(:,:,2)); %显示饱和度信息figure,imshow(hsi_image(:,:,3));%显示亮度信息 程序运行结果: 原图 转换到NTSC彩色空间

数字图像处理实验报告

数字图像处理实验 报告 学生姓名:学号: 专业年级: 09级电子信息工程二班

实验一常用MATLAB图像处理命令 一、实验内容 1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。 实验结果如右图: 代码如下: Subplot (1,3,1) i=imread('E:\数字图像处理\2.jpg') imshow(i) title('RGB') Subplot (1,3,2) j=rgb2gray(i) imshow(j) title('灰度') Subplot (1,3,3) k=im2bw(j,0.5) imshow(k) title('二值') 2、对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。 实验结果如右图: 代码如下: Subplot (3,2,1) i=imread('E:\数字图像处理 \16.jpg') x=imresize(i,[250,320]) imshow(x) title('原图x') Subplot (3,2,2) j=imread(''E:\数字图像处理 \17.jpg') y=imresize(j,[250,320]) imshow(y) title('原图y') Subplot (3,2,3) z=imadd(x,y) imshow(z)

title('相加结果');Subplot (3,2,4);z=imsubtract(x,y);imshow(z);title('相减结果') Subplot (3,2,5);z=immultiply(x,y);imshow(z);title('相乘结果') Subplot (3,2,6);z=imdivide(x,y);imshow(z);title('相除结果') 3、对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口来分别显示,注上文字标题。 实验结果如右图: 代码如下: Subplot (2,2,1) i=imread('E:\数字图像处理 \23.jpg') imshow(i) title('原图') Subplot (2,2,2) J = imadjust(i,[],[],3); imshow(J) title('变暗') Subplot (2,2,3) J = imadjust(i,[],[],0.4) imshow(J) title('变亮') Subplot (2,2,4) J=255-i Imshow(J) title('变负') 二、实验总结 分析图像的代数运算结果,分别陈述图像的加、减、乘、除运算可能的应用领域。 解答:图像减运算与图像加运算的原理和用法类似,同样要求两幅图像X、Y的大小类型相同,但是图像减运算imsubtract()有可能导致结果中出现负数,此时系统将负数统一置为零,即为黑色。 乘运算实际上是对两幅原始图像X、Y对应的像素点进行点乘(X.*Y),将结果输出到矩阵Z中,若乘以一个常数,将改变图像的亮度:若常数值大于1,则乘运算后的图像将会变亮;叵常数值小于是,则图像将会会暗。可用来改变图像的灰度级,实现灰度级变换,也可以用来遮住图像的某些部分,其典型应用是用于获得掩膜图像。 除运算操作与乘运算操作互为逆运算,就是对两幅图像的对应像素点进行点(X./Y), imdivide()同样可以通过除以一个常数来改变原始图像的亮度,可用来改变图像的灰度级,其典型运用是比值图像处理。 加法运算的一个重要应用是对同一场景的多幅图像求平均值 减法运算常用于检测变化及运动的物体,图像相减运算又称为图像差分运算,差分运算还可以用于消除图像背景,用于混合图像的分离。

数字图像处理实验

《数字图像处理》 实验报告 学院:信息工程学院 专业:电子信息工程 学号: 姓名: 2015年6月18日

目录 实验一图像的读取、存储和显示 (2) 实验二图像直方图分析 (6) 实验三图像的滤波及增强 (15) 实验四噪声图像的复原 (19) 实验五图像的分割与边缘提取 (23) 附录1MATLAB简介 (27)

实验一图像的读取、存储和显示 一、实验目的与要求 1.熟悉及掌握在MATLAB中能够处理哪些格式图像。 2.熟练掌握在MATLAB中如何读取图像。 3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。 4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。 5.图像的显示。 二、实验原理 一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。图像关于x和y坐标以及振幅连续。要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。将坐标值数字化成为取样;将振幅数字化成为量化。采样和量化的过程如图1所示。因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。 三、实验设备 (1) PC计算机 (2) MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox) (3) 实验所需要的图片 四、实验内容及步骤 1.利用imread( )函数读取一幅图像,假设其名为flower.tif,存入一个数组中; 2.利用whos 命令提取该读入图像flower.tif的基本信息; 3.利用imshow()函数来显示这幅图像; 4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息; 5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件设为flower.jpg语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。 6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。 7.用imread()读入图像:Lenna.jpg 和camema.jpg; 8.用imfinfo()获取图像Lenna.jpg和camema.jpg 的大小;

数字图像处理实验一(附源程序)

数字图像处理—实验一 一.实验内容: 图像灰度变换 二.实验目的: 学会用Matlab 软件对图像灰度进行变换;感受各种不同的灰度变换方法对最终图像效果的影响。 三.实验步骤: 1.获取实验用图像:rice.jpg. 使用imread 函数将图像读入Matlab 。 2.产生灰度变换函数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 函数保存处理后的新图像。 3.产生灰度变换函数T2,使得: s = 用T2对原图像rice.jpg 进行处理,使用imwrite 保存处理后的新图像。 4.分别用 s = r 0.6; s = r 0.4; s = r 0.3 对kids.tiff 图像进行处理。为简便起见,请 使用Matlab 中的imadjust 函数。使用imwrite 保存处理后的新图像。 5.对circuit.jpg 图像实施反变换(Negative Transformation )。s =1-r; 使用 imwrite 保存处理后的新图像。 6.对rice.jpg 图像实施灰度切片(Gray-level slicing )。具体要求如下: 当0.2 ≤ r ≤ 0.4时,将r 置为0.6, 当r 位于其他区间时, 保持其灰度与原图像一样。使用imwrite 保存处理后的新图像。 7.利用灰度变换对Picture.jpg 做增强处理,突出图中的人物,改善整个图像过 于灰暗的背景。通过调节参数,观察变换后的图像与原始图像的变化,寻找出最佳的灰度变换结果。写出所采用的拉伸表达式。(提示:用imhist 观察图像直方图,利用分段线性灰度变换。 )

数字图像处理实验程序MATLAB.

实验一 内容(一) (1)彩色图像变灰度图像 A=imread('1.jpg'); B=rgb2gray(A); figure subplot(1,2,1), imshow(A) title('原图') subplot(1,2,2), imshow(B) title('原图灰度图像') (2)彩色图像变索引图像 A=imread('1.jpg'); figure subplot(1,2,1), imshow(A) title('原图') [X,map]=rgb2ind(A,128); subplot(1,2,2), imshow(X,map) title('原图索引图像') (3)彩色图像变二值图像 A=imread('1.jpg'); figure subplot(1,2,1), imshow(A) title('原图') C=im2bw(A,0.2); subplot(1,2,2), imshow(C) title('原图二值图像') (4)灰度图像变索引图像(一) A=imread('1.jpg'); figure B=rgb2gray(A); subplot(1,2,1), imshow(B) title('灰度图像') C=grayslice(B,39); subplot(1,2,2), imshow(C) title('灰度变索引图像')

(5)灰度图像变索引图像(二) A=imread('1.jpg'); figure B=rgb2gray(A); subplot(1,2,1), imshow(B) title('灰度图像') [X,map]=gray2ind(B,63); subplot(1,2,2), imshow(X,map) title('灰度变索引图像') (6)灰度图像变彩色图像 A=imread('1.jpg'); figure B=rgb2gray(A); subplot(1,2,1), imshow(B) title('灰度图像') C=gray2rgb(B,map); subplot(1,2,2), imshow(C) title('灰度变彩色图像') 内容(二) (1)灰度平均值 A=imread('1.jpg'); figure B=rgb2gray(A); subplot(1,2,1), imshow(B) title('灰度图像') B=double(B); [m,n]=size(B); sumg=0.0; for i=1:m; for j=1:n; sumg=sumg+B(i,j); end end avg=sumg/(m*n) % 均值 maxg=max(max(B)) % 区域最大灰度ming=min(min(B)) % 区域最小灰度 (2)彩色平均值

数字图像处理试卷及答案

《数字图像处理》模拟试卷(A 卷) 一、单项选择题(从下列各题四个备选答案中选出一个正确答案,并将其代号填在题前的括号内。答案选错或未作选择者,该题不得分。每小题1分,共10分)( d )1.一幅灰度级均匀分布的图象,其灰度范围在[0,255],则该图象的信息量为: a. 0 b.255 c.6 d.8 ( b )2.图象与灰度直方图间的对应关系是: a.一一对应 b.多对一 c.一对多 d.都不对 ( d )3.下列算法中属于局部处理的是: a.灰度线性变换 b.二值化 c.傅立叶变换 d.中值滤波 ( b )4.下列算法中属于点处理的是: a.梯度锐化 b.二值化 c.傅立叶变换 d.中值滤波 ( d ) 5.一曲线的方向链码为12345,则曲线的长度为 a.5 b.4 c.5.83 d.6.24 ( c )6. 下列算法中属于图象平滑处理的是: a.梯度锐化 b.直方图均衡 c. 中值滤波 https://www.360docs.net/doc/5e14587149.html,placian增强 ( b )7.下列图象边缘检测算子中抗噪性能最好的是: a.梯度算子 b.Prewitt算子 c.Roberts算子 d. Laplacian算子 ( c )8.采用模板[-1 1]主要检测____方向的边缘。 a.水平 b.45° c.垂直 d.135° ( d )9.二值图象中分支点的连接数为: a.0 b.1 c.2 d.3 ( a )10.对一幅100′100像元的图象,若每像元用8bit表示其灰度值,经霍夫曼编码后压缩图象的数据量为40000bit,则图象的压缩比为: a.2:1 b.3:1 c.4:1 d.1:2 二、填空题(每空1分,共15分) 1.图像锐化除了在空间域进行外,也可在频率域进行。 2.图像处理中常用的两种邻域是4-邻域和8-邻域。 3.直方图修正法包括直方图均衡和直方图规定化两种方法。 4.常用的灰度内插法有最近邻元法双线性内插法(双)三次内插法 5.多年来建立了许多纹理分析法,这些方法大体可分为统计分析法和结构分析法两大类。 6.低通滤波法是使高频成分受到抑制而让低频成分顺利通过,从而实现图像平滑。 7.检测边缘的Sobel算子对应的模板形式为 和。 8.一般来说,采样间距越大,图象数据量少,质量差;反之亦然。 三、名词解释(每小题3分,共15分) 1.数字图像

数字图像处理实验报告

实验一数字图像的获取 一、实验目的 1、了解图像的实际获取过程。 2、巩固图像空间分辨率和灰度级分辨率、邻域等重要概念。 3、熟练掌握图像读、写、显示、类型转换等matlab 函数的用法。 二、实验内容 1、读取一幅彩色图像,将该彩色图像转化为灰度图像,再将灰度图像转化为索引图像并显示所有图像。 2、编程实现空间分辨率变化的效果。 三、实验原理 1、图像读、写、显示 I=imread(‘image.jpg’) Imview(I) Imshow(I) Imwrite(I,’wodeimage.jpg’) 2、图像类型转换 I=mat2gray(A,[amin,amax]);按指定的取值区间[amin,amax]将数据矩阵A 转化为灰度 图像I,amin 对应灰度0,amax 对应1,也可以不指定该区间。 [x,map]=gray2ind(I,n);按指定的灰度级n 将灰度图像转化为索引图像,n 默认为64 I=ind2gray(x,map);索引图像转化为灰度图像 I=grb2gray(RGB);真彩色图像转化为灰度图像 [x,map]=rgb2ind(RGB);真彩色图像转化为索引图像 RGB=ind2rgb(x,map);索引图像转化为真彩色图像 BW=im2bw(I,level);将灰度图像转化为二值图像,level 取值在[0,1]之间 BW=im2bw(x,map,level);将索引图像转化为二值图像,level 取值在[0,1]之间 BW=im2bw(RGB,level);将真彩色图像转化为二值图像,level 取值在[0,1]之间 四、实验代码及结果 1、in=imread('peppers.png'); i=rgb2gray(in);[x,map]=gray2ind(i,128); subplot(131),imshow(in) subplot(132),imshow(i) subplot(133),imshow(x),colormap(map)

数字图像处理实验代码

// RawToBmpDlg.cpp : 实现文件 // #include "stdafx.h" #include "RawToBmp.h" #include "RawToBmpDlg.h" #include "afxdialogex.h" #include "iostream" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif #define MAX 64 // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP()

// CRawToBmpDlg 对话框 CRawToBmpDlg::CRawToBmpDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CRawToBmpDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CRawToBmpDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_RAW, m_EditRaw); DDX_Control(pDX, IDC_EDIT_BMP, m_EditBmp); } BEGIN_MESSAGE_MAP(CRawToBmpDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(ID_CONVERT, &CRawToBmpDlg::OnBnClickedConvert) END_MESSAGE_MAP() // CRawToBmpDlg 消息处理程序 BOOL CRawToBmpDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid;

相关文档
最新文档