天津科技大学数字图像处理实验报告.docx

上传人:b****8 文档编号:11256453 上传时间:2023-02-26 格式:DOCX 页数:17 大小:23.65KB
下载 相关 举报
天津科技大学数字图像处理实验报告.docx_第1页
第1页 / 共17页
天津科技大学数字图像处理实验报告.docx_第2页
第2页 / 共17页
天津科技大学数字图像处理实验报告.docx_第3页
第3页 / 共17页
天津科技大学数字图像处理实验报告.docx_第4页
第4页 / 共17页
天津科技大学数字图像处理实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

天津科技大学数字图像处理实验报告.docx

《天津科技大学数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《天津科技大学数字图像处理实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

天津科技大学数字图像处理实验报告.docx

天津科技大学数字图像处理实验报告

 

数字图像处理实验报告

 

·

 

专业:

计算机科学技术

学号:

********

姓名:

马艳松

提交日期:

2014.6.5

 

实验一数字图像的读入与显示

一.实验目的:

1.熟悉opencv的开发环境设置

2.读取一幅图像,并显示,掌握Imread,imwrite,imshow的使用

3.掌握opencv中图像的表示,及其属性的含义。

二.实验内容:

配置好visualstudio2010下opnecv开发环境

使用opencv的函数读入一幅图像,并在窗口中显示出来。

三.实验步骤:

#include"stdafx.h"

#include

usingnamespacecv;

usingnamespacestd;

voidtest1()

{

MatinputImage=imread("..\\image\\book\\beach.jpg",1);

if(!

inputImage.empty())

{

cvNamedWindow("test");

imshow("test",inputImage);

waitKey();

}

else

{

cout<<"fileopenerror!

";

getchar();

}

}

int_tmain(intargc,_TCHAR*argv[])

{

test1();

return0;

}

四.实验心得:

通过上课实验理解了opencv的配置过程。

通过程序实现了图片的成象处理。

实验二数字图像像素的访问

一.实验目的:

掌握opencv开发环境中对灰度图像及彩色图像中的像素的访问方法

理解mat数据结构

掌握opencv中对图像进行处理的基本过程。

二.实验内容:

(1)打开一幅灰度图像,对其进行线性灰度变换(直线方程的参数为k,b),并显示变换前、后的图像。

;调整K值,分别取>1,<1,=1,以及-1,比较不同K值时的图像增强效果。

(2)打开一幅彩色图像,对每个像素进行访问,分别令R、G、B的值为0,查看处理后的图像,并比较原图像的差异。

重点和难点:

掌握灰度图像和彩色图像的像素的值的访问方法。

三.实验步骤:

1r)实验代码

voidimage1Pixel()

{

doubledurationa,durationb,durationc;

doublecacStart,cacEnd;

Matimage=imread("..\\image\\book\\beach.jpg",1);

Matgray(image.size().height,image.size().width,CV_8UC1,Scalar(0));

//gray=0.299R+0.587G+0.114b

ucharr,g,b;

floatfgray;

cacStart=static_cast(getTickCount());

for(intm=0;m<100;m++)

for(inti=0;i

for(intj=0;j

{

b=image.at(i,j)[0];

g=image.at(i,j)[1];

r=image.at(i,j)[2];

fgray=0.299*r+0.587*g+0.114*b;

gray.at(i,j)=saturate_cast(fgray);

}

imshow("",gray);

cacEnd=static_cast(getTickCount());

durationa=(cacEnd-cacStart)/cv:

:

getTickFrequency();//theelapsedtimeinms

waitKey();

}

2)实验代码

#include"stdafx.h"

#include

usingnamespacecv;

usingnamespacestd;

voidimage1Pixel()

{

doubledurationa,durationb,durationc;

doublecacStart,cacEnd;

Matimage=imread("..\\image\\book\\beach.jpg",1);

Matgray(image.size().height,image.size().width,CV_8UC1,Scalar(0));

MatgrayGB(image.size().height,image.size().width,CV_8UC3,Scalar(0));

MatgrayRB(image.size().height,image.size().width,CV_8UC3,Scalar(0));

MatgrayRG(image.size().height,image.size().width,CV_8UC3,Scalar(0));

ucharr,g,b;

floatfgray;

cacStart=static_cast(getTickCount());

for(intm=0;m<100;m++)

for(inti=0;i

for(intj=0;j

{b=image.at(i,j)[0];

g=image.at(i,j)[1];

r=image.at(i,j)[2];

////////////////////////////

grayGB.at(i,j)[0]=b;

grayGB.at(i,j)[1]=g;

grayGB.at(i,j)[2]=0;//R

grayRB.at(i,j)[0]=b;

grayRB.at(i,j)[1]=0;//G

grayRB.at(i,j)[2]=r;

grayRG.at(i,j)[0]=0;//B

grayRG.at(i,j)[1]=g;

grayRG.at(i,j)[2]=r;

////////////////////////////

fgray=0.299*r+0.587*g+0.114*b;

gray.at(i,j)=saturate_cast(fgray);

}

cvNamedWindow("org");

imshow("org",image);

cvNamedWindow("gray");

imshow("gray",gray);

waitKey();

cacEnd=static_cast(getTickCount());

durationa=(cacEnd-cacStart)/cv:

:

getTickFrequency();

}

voidtest1()

{

MatinputImage=imread("..\\image\\book\\beach.jpg",1);

if(!

inputImage.empty())

{

cvNamedWindow("test");

imshow("test",inputImage);

waitKey();

}

else

{

cout<<"fileopenerror!

";

getchar();

}

}

int_tmain(intargc,_TCHAR*argv[])

{

image1Pixel();

test1();

return0;

}

 

心得体会:

通过本次试验,我了解并大致掌握灰度图像和彩色图像的像素的值的访问方法。

由于之前很少练习这方面的内容,试验过程中遇到了一些问题,好在在别人的帮助下和向别人咨询终于了解了这方面知识的大致框架和原理。

由此更坚定了我学习下去的信心和动力!

实验三图像的平滑

一.实验目的:

掌握opencv开发环境中对灰度图像及彩色图像中的像素的访问方法

掌握opencv中对图像进行处理的基本过程。

掌握均值平滑和中值滤波的基本原理

二.实验内容:

(1)打开一幅灰度图像,对图像进行3*3(包括中心点)的邻域平均处理。

(2)对原图进行3*3(包括中心点)的中值滤波处理。

(3)比较原图像与邻域平均的图像、中值滤波后的图像的差异

三.实验步骤:

1)中值滤波处理

for(inti=1;i

{

for(intj=1;j

{

inta[9]={gray.at(i-1,j),gray.at(i,j),gray.at(i+1,j),

gray.at(i-1,j-j),gray.at(i,j-1),gray.at(i+1,j-1)

+gray.at(i-1,j+1),gray.at(i,j+1),gray.at(i+1,j+1)};

gray.at(i,j)=GetMidNum(a);

}

}

imshow("中值滤波",gray);

cacEnd=static_cast(getTickCount());

durationa=(cacEnd-cacStart)/cv:

:

getTickFrequency();

waitKey();

}

intGetMidNum(intn[])

{

for(inti=0;i<9;i++)

for(intj=0;j<8;j++)

{

if(n[j]>n[j+1])

{

inttemp;

temp=n[j+1];

n[j+1]=n[j];

n[j]=temp;

}

}

returnn[4];

}

voidtest4_4()

{

intcount[256];//存放各个像素值对应的个数

floathist[256],sumHist[256];

uchargrayHist[256];

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

{

count[i]=0;

hist[i]=0;

sumHist[i]=0;

grayHist[i]=0;

}

Matimage=imread("..\\image\\book\\beach.jpg",0);

for(inti=0;i

{

uchar*data=image.ptr(i);

for(intj=0;j

{

count[data[j]]++;

}

}

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

hist[i]=((float)count[i])/(image.size().height*image.size().width);sumHist[0]=hist[0];

for(inti=1;i<256;i++)

sumHist[i]=sumHist[i-1]+hist[i];for(inti=0;i<256;i++)

grayHist[i]=saturate_cast(sumHist[i]*255);

Matgray(image.size().height,image.size().width,CV_8UC1,Scalar(0));

for(inti=0;i

{

uchar*data=image.ptr(i);

uchar*grayData=gray.ptr(i);

for(intj=0;j

{

grayData[j]=grayHist[data[j]];

}

}

cvNamedWindow("tset");

imshow("org",image);

cvNamedWindow("hist");

imshow("hist",gray);

waitKey();

}

int_tmain(intargc,_TCHAR*argv[])

{

image1Pixel();

//Test3();

//test4_4();

return0;

}

2)邻域平均

voidimage1Pixel()

{

doubledurationa,durationb,durationc;

doublecacStart,cacEnd;

Matimage=imread("..\\image\\book\\beach.jpg",1);

Matgray(image.size().height,image.size().width,CV_8UC1,Scalar(0));

//gray=0.299R+0.587G+0.114b

ucharr,g,b;

floatfgray;

cacStart=static_cast(getTickCount());

for(intm=0;m<100;m++)

for(inti=0;i

for(intj=0;j

{

b=image.at(i,j)[0];

g=image.at(i,j)[1];

r=image.at(i,j)[2];

fgray=0.299*r+0.587*g+0.114*b;

gray.at(i,j)=saturate_cast(fgray);

}

imshow("",gray);

cacEnd=static_cast(getTickCount());

durationa=(cacEnd-cacStart)/cv:

:

getTickFrequency();//theelapsedtimeinms

waitKey();

}

voidTest3()

{

intGetMidNum(intn[]);

doubledurationa,durationb,durationc;

doublecacStart,cacEnd;

Matimage=imread("..\\image\\book\\beach.jpg",1);

Matgray(image.size().height,image.size().width,CV_8UC1,Scalar(0));

MatgrayGB(image.size().height,image.size().width,CV_8UC3,Scalar(0));

MatgrayRB(image.size().height,image.size().width,CV_8UC3,Scalar(0));

MatgrayRG(image.size().height,image.size().width,CV_8UC3,Scalar(0));

//gray=0.299R+0.587G+0.114b

ucharr,g,b;

floatfgray;

cacStart=static_cast(getTickCount());

for(intm=0;m<100;m++)

for(inti=0;i

for(intj=0;j

{

b=image.at(i,j)[0];

g=image.at(i,j)[1];

r=image.at(i,j)[2];

 

fgray=0.299*r+0.587*g+0.114*b;

gray.at(i,j)=saturate_cast(fgray);

}imshow("原图",gray);

for(inti=1;i

for(intj=1;j

{

gray.at(i,j)=(gray.at(i-1,j)+gray.at(i,j)+gray.at(i+1,j)+

gray.at(i-1,j-j)+gray.at(i,j-1)+gray.at(i+1,j-1)

+gray.at(i-1,j+1)+gray.at(i,j+1)+gray.at(i+1,j+1))/9;

}

imshow("邻域平均",gray);

}

 

实验心得:

通过这次试验,我明白了,平滑技术用于平滑图像的噪声,平滑噪声可以在空间域中进行,基本方法是求像素灰度的平均值或中值。

但是这些很容易引起边缘的模糊,常用的有均值滤波、中值滤波,在使用时,针对不同的噪声,也需要不同的滤波法,没有哪种方法是绝对好,必须具体情况具体分析。

最后比较三种平滑效果,八点平滑最好,说明对高斯噪声平滑滤波效果较好。

中值滤波基本把椒盐噪声都滤去了,说明中值滤波对椒盐噪声平滑效果比高斯噪声好。

实验四图像的直方图均衡化

一.实验目的:

掌握直方图均衡化的基本步骤及实现方法

掌握opencv中对图像进行处理的基本过程。

二.实验内容:

(1)打开一幅灰度图像,对图像进行直方图均衡化处理。

(2)比较原图像与均衡化的图像的差异。

(3)要求自己按照课本介绍的均衡化的步骤在opencv下实现直方图均衡化处理。

三.实验步骤:

voidtest1()

{

MatinputImage=imread("..\\image\\book\\beach.jpg",1);

if(!

inputImage.empty())

{

cvNamedWindow("test");

imshow("test",inputImage);

waitKey();

}

else

{

cout<<"fileopenerror!

";

getchar();

}

}

voidtest4()

{

intcount[256];

floathist[256],sumHist[256];

uchargrayHist[256];

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

{

count[i]=0;

hist[i]=0;

sumHist[i]=0;

grayHist[i]=0;

}

Matimage=imread("..\\image\\book\\beach.jpg",0);

for(inti=0;i

{

uchar*data=image.ptr(i);

for(intj=0;j

{

count[data[j]]++;

}

}

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

hist[i]=((float)count[i])/(image.size().height*image.size().width);

sumHist[0]=hist[0];

for(inti=1;i<256;i++)

sumHist[i]=sumHist[i-1]+hist[i];

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

grayHist[i]=saturate_cast(sumHist[i]*255);

Matgray(image.size().height,image.size().width,CV_8UC1,Scalar(0));

for(inti=0;i

{

uchar*data=image.ptr(i);

uchar*grayData=gray.ptr(i);

for(intj=0;j

{

grayData[j]=grayHist[data[j]];

}

}

cvNamedWindow("org");

imshow("org",image);

cvNamedWindow("hist");

imshow("hist",gray);

waitKey();

}

int_tmain(intargc,_TCHAR*argv[])

{

//test1();

test4();

return0;

}

四.实验心得:

通过这次的实验,我明白了直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。

直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1