常州工学院数字图像处理及应用2022-2023第二学期实验报告 + 期末

news2024/10/7 9:26:07

                                《数字图像处理及应用》

课程

实验报告书

专业班级:

21计二

姓    名:

王梓权

学    号:

21030228

指导教师:

徐则中

计算机信息工程学院

《数字图像处理》实验

  • 实验教学目的和要求

《数字图像处理》课程内容是一门综合性很强的专业课程。主要内容是对采集的数字图像进行处理,包括:图像变换、图像增强、图像恢复、图像分割、图像分析与理解、图像压缩等各种图像处理算法的基本理论、方法和技术。

通过本课程的学习,使学生掌握有关数字图像处理与分析的基本概念、基础理论、实用技术和典型方法。使学生了解图像变换与增强、图像分割与理解的技术方法,为将来的研究和应用打下良好的基础。

通过实验环节,加强学生对所学数字图像处理知识的深入理解,增强对数字图像处理的感性认识,掌握图像处理技术的基本实现步骤。为今后进行各种有关数字图像处理程序的编制和开发打下良好的基础。

1、掌握数字图像的基本变换,通过线性或非线性灰度变换、直方图均衡算法等,增强图像质量。

2、掌握数字图像的一般分割技术,从数字图像中提取目标对象的轮廓形状,用于进一步的分析处理。

3、掌握在Visual Studio 下用C++编写程序、调试程序,实现数字图像处理算法、开发简单的图像处理应用程序。能够对图像处理结果进行分析、评价。 

二、实验项目表

序号

实   验   名   称

学时数

1

图像变换与增强

2

2

图像分割与理解

2

三、主要实验仪器及材料 

微型计算机、Visual Studio C++编程环境。 

四、考核方式

1、每一次实验指导教师应对其实际上机的预习情况、操作情况和实验报告完成情况进行综合评价,并给出综合成绩。

2、学期结束,对所有实验的成绩进行综合,其成绩作为期末成绩的一部分。

五、教材及参考书

1、R. C. Gonzalez, R. E. Woods,《数字图像处理》(第二版)北京:电子工业出版社,2003。

2、章毓晋,《数字图像处理基础教程》,北京:清华大学出版社,2012。

3、章民武,《图像处理与图像分析基础》,北京:清华大学版社,2021。


数字图像处理编程基础

一、编程框架

二、算法程序模版

灰度图像处理:

void CDipXuzzView::OnDemo()

{    //代码示例

CClientDC dc(this);

CDipXuzzDoc* pDoc = GetDocument();   //获得文档

LPSTR lpDIB;                       //指向DIB的指针

     long lWidth, lHeight;                 //图像宽度和高度

     LONG lLineBytes;

LPSTR lpDIBBits;                   //指向DIB的象素的指针

lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());

lpDIBBits = ::FindDIBBits(lpDIB);

lWidth = ::DIBWidth(lpDIB);   //DIB 宽度

lHeight = ::DIBHeight(lpDIB); //DIB 高度

lLineBytes = WIDTHBYTES(lWidth * 8);

if (::DIBNumColors(lpDIB) != 256)

{

MessageBox("支持256色位图", "系统提示" , MB_ICONINFORMATION | MB_OK);

::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

return;

}

unsigned char *lpSrc;

     int i,j;

for(i = 0; i < lWidth; i++)

{

for(j = 0; j < lHeight; j++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 -j) +ij;

//*lpSrc ;

}

}

pDoc->SetModifiedFlag(TRUE);

pDoc->UpdateAllViews(NULL);

::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

}

彩色图像处理:

void CDipXuzzView::OnDemocolor()

{

CDipXuzzDoc* pDoc = GetDocument();

LPSTR lpDIB;                       

LPSTR lpDIBBits;      

    LONG lLineBytes;

    LONG lWidth,lHeight;         

lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());

lWidth = ::DIBWidth(lpDIB);   //DIB 宽度

lHeight = ::DIBHeight(lpDIB); //DIB 高度

lLineBytes = WIDTHBYTES(lWidth*8*3);//真彩色一个象素为3个字节

lpDIBBits = (LPSTR)lpDIB + sizeof(BITMAPINFOHEADER);

     unsigned  char *ired,*igreen,*iblue;

int i,j;

for(i=0; i<lWidth; i++)

{

for(j=0; j<lHeight; j++)

{

ired   =  (unsigned  char*)lpDIBBits + lLineBytes * (lHeight-1 - j) + i*3  + 2;

igreen =  (unsigned  char*)lpDIBBits + lLineBytes * (lHeight-1 - j) + i*3  + 1;

iblue  =  (unsigned  char*)lpDIBBits + lLineBytes * (lHeight-1 - j) + i*3  + 0 ;

*ired =;

*igreen =;

*iblue =;

}

}

::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

pDoc->SetModifiedFlag(TRUE);

pDoc->UpdateAllViews(NULL);

}


实验一   图像变换与增强

  • 实验目的与要求
  1. 熟悉图像灰度变换的基本原理;掌握线性变换和非线性变换处理的方法;编写图像灰度变换处理的程序。
  2. 根据直方图均衡化的原理,设计直方图均衡化的算法,并编程实现直方图均衡化的功能。
  3. 加强学生运用VC++进行算法设计和编程实现的能力。

  • 实验内容
    1. 采集两幅数字图像,图像整体偏暗、偏亮,图片类型为BMP格式。掌握图像的读写方法。
    2. 根据直方图均衡算法的流程,运用VC++编写程序实现图像直方图均衡算法。
    3. 分别对两幅图像进行增强处理,并对结果进行比较、分析,完成实验报告。

  • 实验的算法、程序及结果
  1. 采集两幅数字图像,图像整体偏暗、偏亮,图片类型为BMP格式。掌握图像的读写方法。

 

2.根据直方图均衡算法的流程,运用VC++编写程序实现图像直方图均衡算法。

以下是图像灰度变换算法(核心代码)

  1. 暗变亮

for (i = 0; i < lWidth; i++)

{

for (j = 0; j < lHeight; j++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - j) + i;

temp = 255 - (*lpSrc - 255) * (*lpSrc - 255) / 255.0;

if (temp > 255) temp = 255;

if (temp < 0) temp = 0;

*lpSrc = temp;

dc.SetPixel(lWidth + 10 + i, j, RGB(*lpSrc, *lpSrc, *lpSrc));

}

}

  1. 亮变暗

for (i = 0; i < lWidth; i++)

{

for (j = 0; j < lHeight; j++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - j) + i;

temp = (*lpSrc) * (*lpSrc) / 255.0;

if (temp > 255) temp = 255;

if (temp < 0) temp = 0;

*lpSrc = temp;

dc.SetPixel(lWidth + 10 + i, j, RGB(*lpSrc, *lpSrc, *lpSrc));

}

}

3.分别对两幅图像进行增强处理,并对结果进行比较、分析,完成实验报告。

分析:⑴偏暗照片:经过代码中对lpSrc的非线性变换后可以变亮。将原本照片过暗丢失的楼房、天空以及树木等特征以较好的水平进行了还原,使照片质量得到提升。

 

⑵偏亮照片:经过对lpSrc的非线性变换(平方后除以255)后可以变暗。原本照片过亮,导致了景物过白而模糊以及塔身变灰(类似雾天拍摄效果),经过处理较好地还原绝大部分景物的原本状态,塔身也有了类似除雾处理的效果。

 

  • 实验小结

本实验内容是关于对图像进行增强处理本实验中,我选用一张自己拍摄的常州天宁宝塔照片,并使用照片编辑技术,调节照片的亮度,分别得到偏暗和偏亮的2张照片。

本实验中,我使用灰度变换算法对这两张照片进行处理,增强后的照片可以将原本因过暗、过亮而失真的照片处理到近似于原图的效果,整体看来效果较好:①.将原本照片过暗丢失的楼房、天空以及树木等特征以较好的水平进行了还原,使照片质量得到提升;②.原本照片过亮,导致了景物过白而模糊以及塔身变灰(类似雾天拍摄效果),经过处理较好地还原绝大部分景物的原本状态,塔身也有了类似除雾处理的效果。

综上所述,本实验图片增强效果符合目标要求。


实验二   图像分割与理解

  • 实验目的与要求
    1. 熟悉数字图像分割的基本原理,掌握常用的图像阈值分割、边缘检测处理的方法。
    2. 根据图像分割的原理,设计图像分割算法,并编程实现。
    3. 利用VC++编写图像处理算法,加强学生运用VC进行算法设计和编程实现的能力。

  • 实验内容
    1. 采集一幅个人的数字图像,图片类型为BMP格式。
    2. 根据图像区域分割的方法和流程,实现图像分割算法,利用VC++编写程序。
    3. 掌握简单的图像测量方法,在图像分割的基础上,计算个人的身高和臂长参数。
    4. 用所编程序对给定图像进行测试,并对结果进行分析,完成实验报告。

  • 实验的算法、程序及结果
    1. 采集一幅个人的数字图像,图片类型为BMP格式。

    1. 根据图像区域分割的方法和流程,实现图像分割算法,利用VC++编写程序。

thr = 143;

for (i = 0; i < lWidth; i++)

{

for (j = 0; j < lHeight; j++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - j) + i;

if ((*lpSrc) > thr)

*lpSrc = 255;

else

*lpSrc = 0;

}

}

    1. 掌握简单的图像测量方法,在图像分割的基础上,计算个人的身高和臂长参数。

float calibration = 0.462;//参照量 需要用标定物确定

//寻找最上点

top = lHeight - 1;

black_pixels = 0;

for (i = 0; i < lHeight; i++)

{

black_pixels = 0;

for (j = 0; j < lWidth; j++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;

{

if (*(lpSrc) == 0)//黑像素  black_pixels++;

}

}

if (black_pixels > 5)

{

top = lHeight - 1 - i;

break;

}

}

//寻找最下点

bottom = 0;

black_pixels = 0;

for (i = 0; i < lHeight; i++)

{

black_pixels = 0;

for (j = 0; j < lWidth; j++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

{

if (*(lpSrc) == 0)//黑像素  black_pixels++;

}

}

if (black_pixels > 5)

{

bottom = i;

break;

}

}

BHeight = (top - bottom) * calibration;

//寻找最左点

left = 0;

for (j = 0; j < lWidth; j++)

{

black_pixels = 0;

for (i = 0; i < lHeight; i++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

{

if (*(lpSrc) == 0)//黑像素  black_pixels++;

}

}

if (black_pixels > 5)

{

left = j;

break;

}

}

//寻找最右点

right = 0;

for (j = lWidth - 1; j >= 0; j--)

{

black_pixels = 0;

for (i = 0; i < lHeight; i++)

{

lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

{

if (*(lpSrc) == 0)//黑像素  black_pixels++;

}

}

if (black_pixels > 5)

{

right = j;

break;

}

}

BLength = (right - left) * calibration;

CString sgbc;

CClientDC dc(this);

sgbc.Format("身高=%4.3f cm", BHeight);

dc.TextOut(200, lWidth + 30, sgbc);  //列 行值

sgbc.Format("臂长=%4.3f cm", BLength);

dc.TextOut(400, lWidth + 30, sgbc);

    1. 用所编程序对给定图像进行测试,并对结果进行分析,完成实验报告。

分析图像经过灰度化和阈值分割处理后,可以较容易地找出测量所需的4个点,最终通过调整参照量的大小,确认人像的身高臂长。

 

  • 实验小结

本实验首先对目标的彩色照片灰度化,接着对灰度照片进行阈值分割(选定好thr),目的是将图片进行黑白化(即把像素点亮度划分为仅有0和255组成的效果),其次是寻找人物图像的最高点、最低点、最左端和最右端,并通过调整参照量的大小,最终确认出人物的身高与臂长,并在照片下方显示出来。

综上所述,本实验图片测量数据符合真实情况,能够准确反映真实值。

期末考试答案

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python MongoDB复习第一章

Python 可以在数据库应用程序中使用。 最受欢迎的 NoSQL 数据库之一是 MongoDB。 MongoDB MongoDB 将数据存储在类似 JSON 的文档中&#xff0c;这使得数据库非常灵活和可伸缩。 为了能够测试本教程中的代码示例&#xff0c;您需要访问 MongoDB 数据库。 您可以在 https:/…

论文学习笔记:增强学习应用于OS调度

【引子】周末&#xff0c;读了一篇同事推荐的论文《STUN: Reinforcement-Learning-Based Optimization of Kernel Scheduler Parameters for Static Workload Performance》&#xff0c;很有启发&#xff0c;遂加入个人思考编译成文。 从小型物联网设备到大型服务器&#xff0c…

VIM编辑器的命令使用总结

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 一、VIM编辑器 1、vi概述 2、vim编辑器 3、vim编辑器的安装 4、vim编辑器的四种模式&#xff08;重点&#xff09; ☆ 命令模式 ☆ 编辑模式或输入模式 ☆ 末行模式 ☆ 可视化模式&#xff08;了解&am…

Apache Doris (十三) :数据存储模型之Duplicate数据存储模型

进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 在某些多维分析场景下&#xff0c;数据既没有主键&#xff0c;也没有聚合需求&#xff0c;只需要将数据原封不动的存入表中&#xff0c;数据有…

神经网络初谈

文章目录 简介神经网络的发展历程神经网络的初生神经网络的第一次折戟神经网络的新生&#xff0c;Hinton携BP算法登上历史舞台命途多舛&#xff0c;神经网络的第二次寒冬神经网络的重生&#xff0c;黄袍加身&#xff0c;一步封神神经网络的未来&#xff0c;众说纷纭其他时间点 …

【实战】 四、JWT、用户认证与异步请求(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(五)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求1~56.用useAuth切换登录与非登录状态7.用fetch抽象通用HTTP请求方法&#xff0c;增强通用性8.用useHt…

基于Hadoop的网上购物行为分析设计与实现

有需要本项目的可以私信博主&#xff0c;提供部署和讲解服务&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本研究基于淘宝用户行为的开源数据展开大数据分析研究&#xff0c;通过Hadoop大数据分析平台对阿里天池公开的开源数据集进行多维度的用户行为分析&a…

4.1ORB-SLAM3之处理缓存队列中的关键帧

0.简介 该函数主要包括以下几个部分&#xff1a; 计算该关键帧特征点的Bow信息更新当前关键帧新增地图点的属性更新共视图中关键帧间的连接关系将该关键帧插入到地图中 1.计算该关键帧特征点的Bow信息ComputeBoW() vector<cv::Mat> vCurrentDesc Converter::toDescr…

ModaHub魔搭社区:向量数据库功能主要特点和应用场景

目录 主要特点 向量数据库功能 高性能向量搜索 低延迟高召回率 多向量搜索索引 向量数据库可以帮助的领域 图像相似性搜索 视频相似性搜索 音频相似性搜索 主要特点 向量数据库功能 高性能向量搜索 存储、索引和管理由深度神经网络和其他机器学习&#xff08;ML&…

Matlab论文插图绘制模板第106期—带误差棒的堆叠柱状图

在之前的文章中&#xff0c;分享了Matlab带误差棒的折线图绘制模板&#xff1a; 带误差棒的柱状图绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带误差棒的堆叠柱状图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源…

管理类联考——数学——技巧篇——公式——几何题

三角形 三角形面积公式 S 1 2 b c s i n A 1 2 a c s i n B 1 2 a b s i n C S\frac{1}{2}bcsinA\frac{1}{2}acsinB\frac{1}{2}absinC S21​bcsinA21​acsinB21​absinC(正弦定理)&#xff1b; S p ( p − a ) ( p − b ) ( p − c ) S\sqrt{p(p-a)(p-b)(p-c)} Sp(p−a)…

JAVA-编程基础-06-数组

Lison <dreamlison163.com>, v1.0.0, 2023.03.22 JAVA-编程基础-06-数组 什么是数组 ​ 数组是一种线性数据结构&#xff0c;是一个使用连续的内存空间存放相同的数据类型的集合容器&#xff0c;与其他容器相比&#xff0c;数组的区别主要在于性能与保存基本类型的能力…

ASUS华硕天选air笔记本FX516P原装出厂原厂Win10系统镜像

ASUS华硕笔记本天选air FX516P原厂Windows10系统恢复原装出厂OEM预装自带系统 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华硕电脑管家、奥创控制中心等预装程序 链接&#xff1a;https://pan.baidu.com/s/150QimXQfATAhzxNCl690Nw?pwdhvj6 提取码&#xff1a;h…

10年来测试行业所遇问题,功能/接口/自动化测试?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 10年来测试行业发…

Apache Doris (八) :Doris分布式部署(五) Broker部署及Doris集群启动脚本

目录 1.Broker部署及扩缩容 1.1 BROKER 部署 1.2 BROKER 扩缩容 2. Apache Doris集群启停脚本 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 1.Broker部署及扩缩容 Broker 是 Doris 集…

【系统架构】第六章-数据库设计基础知识(数据库基本概念、关系数据库)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 数据库基本概念 数据库的基础结构是数据模型&#xff0c;数据模型的三要素是数据结构、数据操作和数据的约束条件 数据库三级模式&#xff1a;视图层、逻辑层、物理层 视图层&#xff1a;最高…

Day.2 LeetCode刷题练习(螺旋矩阵)

题目&#xff1a; 例子&#xff1a; 分析题目&#xff1a; 本题给了一个值n要生成一个n*n的矩形&#xff0c;并且是螺旋的生成值。 这样我们可以把它分层来看如n 4时生成一个4*4的矩形由两层矩形构成&#xff0c;这样就能先遍历生成最外面的一层后再去生成里面的一层 那如何…

【VSCODE】4、vscode git pull/push 报错 remote: HTTP Basic: Access denied

一、报错示例 在执行 git pull/push 的时候报错如下 二、解决方式 该问题来自 vscode 的身份验证 打开 vscode →code → 首选项 → 设置搜索 git.terminalAuthentication取消选中该选项重启终端即可

2023黑马头条.微服务项目.跟学笔记(一)

前言 黑马头条一直是黑马培训班内部的项目&#xff0c;应该是今年推出了天机学堂的项目&#xff0c;所以这个头条微服务项目就被公布了&#xff0c;整体上看技术架构丰富&#xff0c;很适合微服务练手和补足。有些技术栈的版本可能是前几年的&#xff0c;不过这个不影响&#x…

医药销售数据分析

阅读原文 一、数据源 来自某医药公司的产品销售数据&#xff0c;时间为 3 月到 5 月&#xff0c;共 48 个 Excel 表格。包含订单信息、售后信息、用户信息以及对应销售人员信息等。 加载合并后得到的原始数据如下&#xff1a; 二、数据清洗 清洗流程以及对应细节 加载数据源 …