课程设计报告
题目:图像处理(Image Processing) 课程:计算机图形学
班级:12信息与计算科学1班 姓名:王锟
学号:20120810010127
学校:华东交通大学
学院:理学院
指导老师:蒋先刚
目录
目录 ........................................................................................................ - 1 - 概述 ........................................................................................................ - 2 -
一、 设计需求...................................................................................... - 3 -
2.1 设计目的 .................................................................................. - 3 -
2.2 系统需求分析 .......................................................................... - 3 -
2.2.1 系统设计主要内容 ......................................................... - 3 -
2.2.2 系统开发环境和工具 ..................................................... - 3 -
二、 设计原理...................................................................................... - 4 -
三、 系统运行界面和功能 ................................................................. - 4 -
四、 源程序代码 ................................................................................. - 8 -
a. 图像放大 .................................................................................... - 8 - b. 图像缩小 .................................................................................... - 8 - c. 图像浮雕 .................................................................................... - 8 - d. 图像曝光 .................................................................................... - 9 - e. 灰度图像扩张 .......................................................................... - 10 - 心得体会 .............................................................................................. - 12 - 参考文献 .............................................................................................. - 12 - - 1 -
概述
计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。计算机图形学研究的是应用计算机产生图像的所有工作,不管图像是静态的还是动态的,可交互的还是固定的,等等。图形API是允许程序员开发包含交互式计算机图形操作的应用而不需要关注图形操作细节或任务系统细节的工具集。计算机图形学有着广泛的应用领域,包括物理、航天、电影、电视、游戏、艺术、广告、通信、天气预报等几乎所有领域都用到了计算机图形学的知识,这些领域通过计算机图形学将几何模型生成图像,将问题可视化从而为各领域更好的服务。
图像处理就是对图像信息加工以满足人的视觉心理或应用需求的方法。图像处理方法有光学方法和电子学方法。从20世纪60年代起随着电子计算机和计算技术的不断提高和普及,数字图像处理进入了高速发展时期,而数字图像处理就是利用数字计算机或其它的硬件设备对图像信息转换而得到的电信号进行某些数学处理以提高图像的实用性。 图像处理在遥感技术,医学领域,安全领域,工业生产中有着广泛的应用,其中在医学应用中的超声、核磁共振和CT等技术,安全领域的模式识别技术,工业中的无损检测技术尤其引人注目。
计算机进行图像处理一般有两个目的:(1)产生更适合人观察和识别的图像。
(2)希望能由计算机自动识别和理解图像。数字图像的边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域的重要基础,图像处理和分析的第一步往往就是边缘检测。 物体的边缘是以图像的局部特征不连续的形式出现的,也就是指图像局部亮度变化最显著的部分,例如灰度值的突变、颜色的突变、纹理结构的突变等,同时物体的边缘也是不同区域的分界处。图像边缘有方向和幅度两个特性,通常沿边缘的走向灰度变化平缓,垂直于边缘走向的像素灰度变化剧烈。根据灰度变化的特点,图像边缘可分为阶跃型、房顶型和凸缘型。 - 2 -
一、设计需求
2.1 设计目的
以图形学算法为目标,从理论上对几种经典的边缘检测算法进行分析,并用Delphi实现这些算法,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到:巩固和实践计算机图形学课程中的理论和算法;最后,通过实例图像对不同边缘检测算法的效果进行分析,找出各种算法的适用范围。通过本课题的研究学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。
2.2 系统需求分析
2.2.1 系统设计主要内容
1. 实现图像导入(可以打开新的图像实现处理)
2. 实现图像放大和缩小(改变图像的大小产生新的图像)
3. 实现图像曝光(曝光的原则是,我们应该判断这三个组件RGB值是否小于128,
则颠倒这个组件的值。换句话说,我们将这个组件的值是255减去旧值)
2.2.2 系统开发环境和工具
开发工具:Borland Delphi 7
系统环境:windows 7 64位旗舰版
- 3 -
Computer Graphics—Computer Processing
二、设计原理
1) 实现图像的导入:导入一个图像时我们应该使用Delphi双重缓冲功能,解决
图像导入;为了使表单上的图像可以被处理,必须导入图像转换为位图。
2) 实现图像的放大和缩小:首先,我们应该创建两个图像对象TestBMP和
ProcessedBmp形象。TestBMP为了输入图像和ProcessedBmp处理图像。然后我们设置高度和宽度ProcessedBmp对于TestBMP的倍数。然后调用系统函数StretchBlt()来处理图像TestBMP。
3) 实现图像曝光:首先我们遍历每个扫描线在Y轴方向,然后遍历每个像素的
RGB值扫描行,我们应该判断是否这三个组件RGB值小于128,则颠倒这个组件的值。换句话说,我们将这个组件的值是255减去旧值。
三、系统运行界面和功能
初始界面
谢悦亮 20120810010124 - 4 -
Computer Graphics—Computer Processing
图像缩小
图像放大
谢悦亮 20120810010124
- 5 -
Computer Graphics—Computer Processing
图像曝光
图像浮雕
谢悦亮 20120810010124
- 6 -
Computer Graphics—Computer Processing
关于我们
谢悦亮 20120810010124
- 7 -
Computer Graphics—Computer Processing
四、源程序代码
a. 图像放大
procedure TImageProcessForm.ImageAmplicationClick(Sender: TObject); //图像放大 begin
TestBMP.Assign(WillbeChangedBmp);
ProcessedBmp.Width := TestBMP.Width * 2;
ProcessedBmp.Height := TestBMP.Width * 2;
StretchBlt(
ProcessedBmp.Canvas.Handle,0, 0, ProcessedBmp.Width, ProcessedBmp.Height,
TestBMP.Canvas.Handle,0, 0, TestBMP.Width, TestBMP.Height,SRCCOPY
);
ChangedBmp.Assign(ProcessedBmp);
ShowChangedBmp;
end;
b. 图像缩小
procedure TImageProcessForm.imageDecressClick(Sender: TObject);
begin
TestBMP.Assign(ChangedBmp);
ProcessedBmp.Width := TestBMP.Width div 2;
ProcessedBmp.Height := TestBMP.Width div 2;
StretchBlt(
ProcessedBmp.Canvas.Handle,0, 0, ProcessedBmp.Width, ProcessedBmp.Height,
TestBMP.Canvas.Handle,0, 0, TestBMP.Width, TestBMP.Height,SRCCOPY
);
ChangedBmp.Assign(ProcessedBmp);
ShowChangedBmp;
end;
c. 图像浮雕
procedure TImageProcessForm.imageReliefClick(Sender: TObject);
var
x,y,i,j,red,green,blue: Integer;
color1,color2: TColor;
begin
TestBMP.Assign(WillbeChangedBmp);
谢悦亮 20120810010124 - 8 -
Computer Graphics—Computer Processing x:=TestBMP.Width;
y:=TestBMP.Height;
{ x := Imagerelief.width;
y := Imagerelief.Height; }
for i := 1 to x-2 do
For j := 1 to y -2 do
begin
color1 := TestBMP.Canvas.Pixels[i,j];
color2 := TestBMP.Canvas.Pixels[i+1,j+1];
red := abs(GetRValue(Color1)-GetRValue(Color2)+128);
Green := abs(GetGValue(color1)-getGvalue(Color2)+128);
blue := abs(GetBValue(color1)-getBvalue(Color2)+128);
if Red >255 then
Red := 255
else if Red<0 then
Red := 0;
if Green >255 then
Green := 255
else if Green<0 then
Green := 0;
if blue >255 then
blue := 255
else if blue<0 then
blue := 0;
TestBMP.Canvas.Pixels[i,j] := rgb(red,green,blue);
end;
ChangedBmp.Assign(TestBMP);
ShowChangedBmp;
end;
d. 图像曝光
procedure TImageProcessForm.BaoGuangClick(Sender: TObject);
var
p: PByteArray;
x, y: Integer;
begin
TestBMP.Assign(WillbeChangedBmp);
for y := 0 to TestBMP.Height - 1 do
begin
p := TestBMP.scanline[y];
for x := 0 to TestBMP.Width - 1 do
begin
if p[x * 3] < 128 then
谢悦亮 20120810010124 - 9 -
Computer Graphics—Computer Processing p[x * 3] := not p[x * 3]; { TODO : 各分量取反 }
if p[x * 3 + 1] < 128 then
p[x * 3 + 1] := not p[x * 3 + 1];
if p[x * 3 + 2] < 128 then
p[x * 3 + 2] := not p[x * 3 + 2];
end;
end;
ChangedBmp.Assign(TestBMP);
ShowChangedBmp;
end;
e. 灰度图像扩张
procedure TImageProcessForm.GrayDilateClick(Sender: TObject);
var
p1, p2, p3, p4,p5,p6: pbytearray;
RvalueArray:array[0..24]of Integer;
i, j: integer;
begin
Self.DoubleBuffered := True;
ProcessedBmp.assign(WillbeChangedBmp);
TestBMP.Assign(WillbeChangedBmp);
for j := 2 to ProcessedBmp.Height - 3 do
begin //处理相邻五条扫描线
p1 := TestBMP.ScanLine[j];
p2 := ProcessedBmp.ScanLine[j - 1];
p3 := ProcessedBmp.ScanLine[j];
p4 := ProcessedBmp.ScanLine[j + 1];
p5 := ProcessedBmp.ScanLine[j + 2];
p6 := ProcessedBmp.ScanLine[j - 2];
for i := 2 to ProcessedBmp.Width - 3 do
begin
RvalueArray[0] := p2[3 * (i - 2) + 2];
RvalueArray[1] := p2[3 * (i-1) + 2];
RvalueArray[2] := p2[3 * i + 2];
RvalueArray[3] := p2[3 * (i+1) + 2];
RvalueArray[4] := p2[3 * (i+2) + 2];
RvalueArray[5] := p3[3 * (i - 2) + 2];
RvalueArray[6] := p3[3 * (i - 1) + 2];
RvalueArray[7] := p3[3 * i + 2];
RvalueArray[8] := p3[3 * (i + 1) + 2];
RvalueArray[9] := p3[3 * (i + 2) + 2];
RvalueArray[10] := p4[3 * (i - 2) + 2];
RvalueArray[11] := p4[3 * (i - 1) + 2];
谢悦亮 20120810010124 - 10 -
Computer Graphics—Computer Processing RvalueArray[12] := p4[3 * i + 2];
RvalueArray[13] := p4[3 * (i + 1) + 2];
RvalueArray[14] := p4[3 * (i + 2) + 2];
RvalueArray[15] := p5[3 * (i -2) + 2];
RvalueArray[16] := p5[3 * (i -1) + 2];
RvalueArray[17] := p5[3 * i + 2];
RvalueArray[18] := p5[3 * (i + 1) + 2];
RvalueArray[19] := p5[3 * (i + 2) + 2];
RvalueArray[20] := p6[3 * (i - 2) + 2];
RvalueArray[21] := p6[3 * (i - 1) + 2];
RvalueArray[22] := p6[3 * i + 2];
RvalueArray[23] := p6[3 * (i + 1) + 2];
RvalueArray[24] := p6[3 * (i + 2) + 2];
SelectionSort(RvalueArray);
p1[3 * i + 2] := RvalueArray[24];
p1[3 * i + 1] := RvalueArray[24];
p1[3 * i] := RvalueArray[24];
end;
end;
ChangedBmp.Assign(TestBMP);
ShowChangedBmp;
end;
谢悦亮 20120810010124 - 11 -
Computer Graphics—Computer Processing
心得体会 经过了一阶段计算机图形学的学习,对于图形学中基本图形的生成算法有了一定的了解。深度研究图形学,需要高深的数学知识,且每一个细化的方向需要的知识也不一样。图形学是计算机科学与技术学科的活跃前沿学科,被广泛的应用到生物学、物理学、化学、天文学、地球物理学、材料科学等领域。我深深感到这门学科涉及的领域之广是惊人的,可以说博大精深。在这个计算机的时代什么都要用到计算机技术,图形也是我们生活中重要的部分,所以我们得好好学好图形学。
参考文献
[1]. 计算机图形学的算法基础(英文版·第二版)
谢悦亮 20120810010124 - 12 - (美) David F. Rogers