文档库 最新最全的文档下载
当前位置:文档库 › 图像的色彩变换实验报告

图像的色彩变换实验报告

图像的色彩变换实验报告
图像的色彩变换实验报告

《医学图像处理》实验报告

实验九:图像的色彩变换

摘要

本次实验的实验目的及主要内容是

了解网络安全色以及伪彩色的含义,并了解其基本原理,通过实验结果更直观的感知它们的含义; 进一步加深对直方图均衡的理解。

一、技术讨论

1.1实验原理

网络安全色:

由于不同的系统使用不同的调色板,而网络浏览器有各自的色板,碰到哪些它没有的色彩,会用最为相似的颜色来代替,这样必然会造成色彩的失真,网络安全色选的216种颜色是让所有的浏览器都支持的颜色。

伪彩色:

伪彩色的含义是,每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作彩色查找表(color look-up table,CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值产生的彩色称为伪彩色。

直方图均衡:

直方图是统计像数统计图,如设一张灰度图或一个通道,值0~255。直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。

二、结果与讨论

2.1实验结果

图一

(a ) (b )

(c ) (d )

(e ) (f )

(g ) (h ) (i )

(a)gradient(b)pseudo color map(c)real case BW image(d)washinton to be convert to pseudo color(e)HSI cube (f)web safe color(g)after separate histoequal(h)the'right' way to equalize histogram(i)real case rgb image

图二

(a)(b)

(c)(d)

(a)real case BW image(b)washinton to be convert to pseudo color

(c)gradient(d)pseudo color map

2.2实验讨论

修改clrman.cpp中第67到69行代码的相位参数,使产生的华盛顿地图中的河流颜色呈红色。不用解释原因。

修改代码如下,其中黄色标记部分为修改部分

(*it_dst)[0] = fabs(sin( pixGrayLevel_src * 2));

(*it_dst)[1] = fabs(sin(pixGrayLevel_src* 2+ (-0) * M_PI));

(*it_dst)[2] = fabs(sin( pixGrayLevel_src*2 + (-0.3) * M_PI));

实验结果如图二所示,由图二(a)明显看出,华盛顿地图中的河流颜色呈红色。

附录(实验代码)

.pro程序

#-------------------------------------------------

#

# Project created by QtCreator 2014-04-27T22:04:47

#

#-------------------------------------------------

QT += core

QT -= gui

TARGET = ColorManipulation_simplified

CONFIG += console

CONFIG -= app_bundle

TEMPLATE = app

win32 {

SOURCES += main.cpp \

clrman.cpp

# put windows configuration below

# PLEASE MODIFY THESE DEFINITIONS BEFORE YOU COMPILE message("Using windows configuration")

OPENCV_PATH=c:\Qt\opencv2.2\include\opencv\

c:\Qt\opencv2.2\include\opencv2\

c:\Qt\opencv2.2\include

LIBS+=c:\Qt\opencv2.2\lib\libopencv_calib3d220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_contrib220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_core220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_features2d220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_flann220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_gpu220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_highgui220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_imgproc220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_legacy220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_ml220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_objdetect220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_video220.dll.a

}

unix {

message("Using unix configuration")

OPENCV_PATH = c:\Qt\opencv2.2\include\opencv\

c:\Qt\opencv2.2\include\opencv2\

c:\Qt\opencv2.2\include

LIBS+=c:\Qt\opencv2.2\lib\libopencv_calib3d220.dll.a\ c:\Qt\opencv2.2\lib\libopencv_contrib220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_core220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_features2d220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_flann220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_gpu220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_highgui220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_imgproc220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_legacy220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_ml220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_objdetect220.dll.a\

c:\Qt\opencv2.2\lib\libopencv_video220.dll.a

}

INCLUDEPATH += $$OPENCV_PATH

HEADERS += \

clrman.h

Main.cpp程序如下:

#include "clrman.h"

#include

#include

#include

#include

int main()

{

{

using namespace cv;

Mat gradBW = cv::imread("d:/gradBW.png",0);

Mat rgbcube = cv::imread("d:/WebSafeTarget.png");

Mat rgbimage = cv::imread("d:/histoResult.png");

Mat washinton = imread("d:/washinton.png",0);

Mat dst;

// pseudo color problem

clrman::pseudoColor(gradBW,dst);

imshow("gradient",gradBW);

imshow("pseudo color map",dst);

waitKey();

clrman::pseudoColor(washinton,dst);

imshow("real case BW image",dst);

imshow("washinton to be convert to pseudo color",washinton);

waitKey();

// web safe color

clrman::cvt2websafe(rgbcube,dst);

imshow("HSI cube",rgbcube);

imshow("web safe color",dst);

waitKey();

// histogram equalization

clrman::histoEqualSep(rgbimage,dst);

imshow("after separate histo equal",dst);

clrman::histoEqual(rgbimage,dst);

imshow("the 'right' way to equalize histogram",dst);

imshow("real case rgb image",rgbimage);

waitKey();

}

return 1;

}

Clrman.cpp程序如下:

#include "clrman.h"

/*****************************************************

* clrman::cvt2websafe function

* this function works with gray or rgb images with

* depth of 8/16

*****************************************************/

void clrman::cvt2websafe(cv::Mat &src, cv::Mat &dst) {

int channels = src.channels();

assert(channels == 1 || channels == 3);

// force convert to depth of 8, initialize the size of dst

if (src.depth() > sizeof(uchar) || dst.size() != src.size()) {

if(channels == 3) {

src.convertTo(src, CV_8UC3);

dst = cv::Mat(src.size(), CV_8UC3);

}

else {

src.convertTo(src, CV_8UC1);

dst = cv::Mat(src.size(), CV_8UC1);

}

}

// this will bring more efficiency, go refer to https://www.wendangku.net/doc/7116218758.html,/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html int rows = src.rows * channels;

int cols = src.cols;

if(src.isContinuous()) {

cols*= rows;

rows = 1;

}

inti,j;

uchar* p_src;

uchar*p_dst;

for(i = 0;i

p_src =src.ptr(i);

p_dst=dst.ptr(i);

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

p_dst[j]= ((p_src[j] +26) /51)* 51;

}

}

}

/*****************************************************

*thisisthe standard pseudocolorconversion

*pleaserefer to this website:

*https://www.wendangku.net/doc/7116218758.html,/2010/01/pseudocolor-implementation-with-opencv/

* this iswhereI get theconstantsfor thefollowingprogram

*the output of thisfunctionisfixed tocv::Vec3d

*****************************************************/

voidclrman::pseudoColor(cv::Mat &gray_src,cv::Mat&rgb_dst){

// create anormalized copyof sourceimage, this newsource'llbe used throughout the function

cv::Matdouble_src;

gray_src.convertTo(double_src,CV_64F);

//normalize double_src so that sinecalculations willwork

cv::normalize(double_src,double_src,M_PI, 0,cv::NORM_MINMAX);

//create dst as64F

rgb_dst =cv::Mat_(gray_src.size());

// createiterators

cv::MatIterator_it_src= double_src.begin();

cv::MatIterator_ it_dst =rgb_dst.begin();

cv::MatIterator_it_end = double_src.end();

for(; it_src!=it_end;it_src++,it_dst ++){

double pixGrayLevel_src=*it_src;

(*it_dst)[0] =fabs(sin(pixGrayLevel_src* 2));

(*it_dst)[1] = fabs(sin( pixGrayLevel_src *2+(-0.1)* M_PI));

(*it_dst)[2]=fabs(sin(pixGrayLevel_src*2 +(-0.3) * M_PI));

}

}

/*****************************************************

* this function implements histogram equalization on all

* three channels separately

* as a bonus it also takes gray scale image

*****************************************************/ void clrman::histoEqualSep(cv::Mat &src, cv::Mat &dst) { int channels =src.channels();

//crashthe program ifimageswithweirdformatscomes in

assert(channels == 1 || channels == 3);

// for gray scale images

if(channels== 1)cv::equalizeHist(src,dst);

//forrgb images

elseif(channels== 3){

cv::MatchannelContainer[3];

cv::split(src,channelContainer);

// equalize all 3 channels

cv::equalizeHist(channelContainer[0],channelContainer[0]);

cv::equalizeHist(channelContainer[1],channelContainer[1]);

cv::equalizeHist(channelContainer[2],channelContainer[2]);

// merge into one rgb mat

cv::merge(channelContainer,3,dst);

}

}

/*****************************************************

* this function implements histogram equalization on

* YUV space, that way we just have to deal with channel

* Y, and leave the color information alone so that

* the result don't get distorted

*****************************************************/ void clrman::histoEqual(cv::Mat &src, cv::Mat &dst) {

assert(src.channels() == 3);

// convert source image to YUV space

cv::cvtColor(src,dst,CV_BGR2YCrCb);

// split into YUV channels

cv::Mat channelContainers[3];

cv::split(dst,channelContainers);

// perform histogram equalization only to Y channel

cv::equalizeHist(channelContainers[0],channelContainers[0]);

// merge into one piece

cv::merge(channelContainers,3,dst);

// convert back to rgb so that it gets displayed properly

cv::cvtColor(dst,dst,CV_YUV2BGR);

}

/*****************************************************

* I tried (and failed) to design a function that convert

* images with arbitary depth to pseudo color with user-

* specified thretholds.

* right now THIS FUNCTION IS CONSIDERED USELESS

* clrman::pseudoColor function

* the function work with RGB images with arbitrary depth

* there's no reason to use double for threthold values,

* but here the shortest data type appropriate depends on

* the color depth of the source image.

*

* to specify channel, use something like CLRMAN_BLUE

*****************************************************/

template

void clrman::pseudoColor(cv::Mat &gray_src, cv::Mat &rgb_dst, double upperBound, double lowerBound , int channel) {

// calculate lootup table for each channel

// but what size should it take?

// forget about CLUT

assert(

gray_src.channels() == 1 &&

rgb_dst.channels() == 3 &&

gray_src.rows == rgb_dst.rows &&

gray_src.cols == rgb_dst.cols);

cv::MatIterator_ it_src = gray_src.begin();

cv::MatIterator_ it_dst = rgb_dst.begin();

cv::MatIterator_ it_end = gray_src.end();

for(; it_src != it_end; it_src ++, it_dst ++) {

double pixGrayLevel_src = *it_src;

// if the gray level of that pixel falls outside the area we specified, copy the value to all 3 channels

// the first condition is mostly likely to happen

if (

pixGrayLevel_src > upperBound ||

pixGrayLevel_src < lowerBound

) {

(*it_dst)[0] = pixGrayLevel_src;

(*it_dst)[1] = pixGrayLevel_src;

(*it_dst)[2] = pixGrayLevel_src;

}

// if the program ever runs to here, that means we have a pixel that falls in between our interested area, move it to r/g/b channel as specified

else {

// set the pixel in dst to zero, and then set r/g/b channel to current pixel gray level

(*it_dst)[0] = 0;

(*it_dst)[1] = 0;

(*it_dst)[2] = 0;

(*it_dst)[channel] = pixGrayLevel_src;

}

}

}

template void clrman::pseudoColor(cv::Mat &gray_src, cv::Mat &rgb_dst, double upperBound, double lowerBound , int channel);

数字图像处理实验报告

数字图像处理实验报告 实验一数字图像基本操作及灰度调整 一、实验目的 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) 对比拉伸:在实际应用中,为了突出图像中感兴趣的研究对象,常常要求 局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段线性拉伸: 其对应的数学表达式为:

图像灰度变换实验报告

图像灰度变换报告 一.实验目的 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; 使

图形学实验报告

计 算 机 图 形 学 实验指导书 学号:1441901105 姓名:谢卉

实验一:图形的几何变换 实验学时:4学时 实验类型:验证 实验要求:必修 一、实验目的 二维图形的平移、缩放、旋转和投影变换(投影变换可在实验三中实现)等是最基本的图形变换,被广泛用于计算机图形学的各种应用程序中,本实验通过算法分析以及程序设计实验二维的图形变换,以了解变换实现的方法。如可能也可进行裁剪设计。 二、实验内容 掌握平移、缩放、旋转变换的基本原理,理解线段裁剪的算法原理,并通过程序设计实现上述变换。建议采用VC++实现OpenGL程序设计。 三、实验原理、方法和手段 1.图形的平移 在屏幕上显示一个人或其它物体(如图1所示),用交互操作方式使其在屏幕上沿水平和垂直方向移动Tx和Ty,则有 x’=x+Tx y’=y+Ty 其中:x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。其交互方式可先定义键值,然后操作功能键使其移动。 2.图形的缩放 在屏幕上显示一个帆船(使它生成在右下方),使其相对于屏幕坐标原点缩小s倍(即x方向和y方向均缩小s倍)。则有: x’=x*s y’=y*s 注意:有时图形缩放并不一定相对于原点,而是事先确定一个参考位置。一般情况下,参考点在图形的左下角或中心。设参考点坐标为xf、yf则有变换公式x’=x*Sx+xf*(1-Sx)=xf+(x-xf)*Sx y’=y*Sy+yf*(1-Sy)=yf+(y-yf)*Sy 式中的x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。当Sx>1和Sy>1时为放大倍数,Sx<1和Sy<1时为缩小倍数(但Sx和Sy

数字图像处理实验报告.

数字图像处理实验报告

实验一 数字图像的基本操作和灰度变换 一、 实验目的 1. 了解数字图像的基本数据结构 2. 熟悉Matlab 中数字图像处理的基本函数和基本使用方法 3. 掌握图像灰度变换的基本理论和实现方法 4. 掌握直方图均衡化增强的基本理论和实现方法 二、实验原理 1. 图像灰度的线性变换 灰度的线性变换可以突出图像中的重要信息。通常情况下,处理前后的图像灰度级是相同的,即处理前后的图像灰度级都为[0,255]。那么,从原理上讲,我们就只能通过抑制非重要信息的对比度来腾出空间给重要信息进行对比度展宽。 设原图像的灰度为),(j i f ,处理后的图像的灰度为),(j i g ,对比度线性展宽的原理示意图如图1.1所示。假设原图像中我们关心的景物的灰度分布在[a f , b f ]区间内,处理后的图像中,我们关心的景物的灰度分布在[a g ,b g ]区间内。在这里)(a b g g g -=?()b a f f f >?=-,也就是说我们所关心的景物的灰度级得到了展宽。 根据图中所示的映射关系中分段直线的斜率我们可以得出线性对比度展 b g a g a b )j 图1.1 对比度线性变换关系

宽的计算公式: ),(j i f α, a f j i f <≤),(0 =),(j i g a a g f j i f b +-)),((, b a f j i f f <≤).,( (1-1) b b g f j i f c +-)),((, 255),(<≤j i f f b (m i ,3,2,1 =;n j ,3,2,1 =) 其中,a a f g a = ,a b a b f f g g b --=,b b f g c --=255255,图像的大小为m ×n 。 2. 直方图均衡化 直方图均衡化是将原始图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。 离散图像均衡化处理可通过变换函数: 来实现。 三、实验步骤 1.图像灰度线性变换的实现 (1)读入一幅灰度图像test1.tif ,显示其灰度直方图。 新建M 文件,Untitled1.m ,编辑代码如下。 得到读入图像test1和它的灰度直方图。

东南大学数字图像处理实验报告

数字图像处理 实验报告 学号:04211734 姓名:付永钦 日期:2014/6/7 1.图像直方图统计 ①原理:灰度直方图是将数字图像的所有像素,按照灰度值的大小,统计其所出现的频度。 通常,灰度直方图的横坐标表示灰度值,纵坐标为半个像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。 ②算法: clear all PS=imread('girl-grey1.jpg'); %读入JPG彩色图像文件figure(1);subplot(1,2,1);imshow(PS);title('原图像灰度图'); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率end figure(1);subplot(1,2,2);bar(0:255,GP,'g') %绘制直方图 axis([0 255 min(GP) max(GP)]); title('原图像直方图') xlabel('灰度值') ylabel('出现概率') ③处理结果:

原图像灰度图 100 200 0.005 0.010.0150.020.025 0.030.035 0.04原图像直方图 灰度值 出现概率 ④结果分析:由图可以看出,原图像的灰度直方图比较集中。 2. 图像的线性变换 ①原理:直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主 要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。从而达到清晰图像的目的。 ②算法: clear all %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('girl-grey1.jpg'); figure(1);subplot(2,2,1);imshow(PS);title('原图像灰度图'); %二,绘制直方图 [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255

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

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彩色空间

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('原始图像直方图') %在原图直方图上加标题运行结果如下:

数字图像实验报告

图像处理实验报告 1、实验目的: (1)用高斯低通滤波器对图像进行处理,并了解效果以及产生该效果的原因。 (2)生成图片,并对该图片进行多种滤波器处理:算术均值,几何均值,谐波均值,逆谐波均值,中值滤波,中点滤波,最大,最小值滤波等。并分析比较。 2、实验思路: (1) 先将原图像进行零填充,然后再FFT。使用函数paddedsize.计算图像FFT所用的填充尺寸,获得填充参数,使用dftuv函数获得U,V的值,代入高斯滤波器传递函数,最后通过频域滤波得到图像。 (2)实验要求的滤波器都可以用自定义函数spfilt实现。主要的难点在于是spfilt函数的使用。 3、实验代码 (1) f = imread('c.bmp'); subplot(2,2,1),imshow(f,[]), title('原始图像'); PQ = paddedsize(size(f));%用函数paddedsize获得填充参数 [U,V]= dftuv(PQ(1),PQ(2));%计算PQ1*PQ2大小的矩形每一点到矩形原点距离的平方 D0=30; H = exp(-(U.^2 +V.^2)/(2*(D0^2)));%高斯滤波传递函数 for i=1:1:10; F = fft2(f,PQ(1),PQ(2));%得到有填充的傅里叶变换 g = dftfilt(f,H);%频域处理得到滤波图像 f=g; end;

subplot(2,2,2),imshow(g,[]), title('D0=30'); D0=30;%改变循环的值重复以上步骤 H = exp(-(U.^2 +V.^2)/(2*(D0^2))); for i=1:1:20; F = fft2(f,PQ(1),PQ(2)); g = dftfilt(f,H); f=g; end; subplot(2,2,3),imshow(g,[]), title('20次滤波'); D0=30; H = exp(-(U.^2 +V.^2)/(2*(D0^2))); for i=1:1:50; F = fft2(f,PQ(1),PQ(2)); g = dftfilt(f,H); f=g; end; subplot(2,2,4),imshow(g,[]), title('50次滤波'); (2) tk = 1 : 17+7 : (17+7)*10; I = zeros(210+10*2, (17+7)*10); for i = 1 : length(tk)-1 I(10:10+210, tk(i+1):tk(i+1)+6) = 1; end

实验一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)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

数字图像处理实验报告

数字图像处理试验报告 实验二:数字图像的空间滤波和频域滤波 姓名:XX学号:2XXXXXXX 实验日期:2017 年4 月26 日 1.实验目的 1. 掌握图像滤波的基本定义及目的。 2. 理解空间域滤波的基本原理及方法。 3. 掌握进行图像的空域滤波的方法。 4. 掌握傅立叶变换及逆变换的基本原理方法。 5. 理解频域滤波的基本原理及方法。 6. 掌握进行图像的频域滤波的方法。 2.实验内容与要求 1. 平滑空间滤波: 1) 读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一 图像窗口中。 2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要 求在同一窗口中显示。 3) 使用函数 imfilter 时,分别采用不同的填充方法(或边界选项,如零填 充、’replicate’、’symmetric’、’circular’)进行低通滤波,显示处理后的图 像。 4) 运用 for 循环,将加有椒盐噪声的图像进行 10 次,20 次均值滤波,查看其特点, 显 示均值处理后的图像(提示:利用fspecial 函数的’average’类型生成均值滤波器)。 5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要 求在同一窗口中显示结果。 6) 自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。 2. 锐化空间滤波 1) 读出一幅图像,采用3×3 的拉普拉斯算子 w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1] 对其进行滤波。 2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5 ×5的拉普拉斯算子 w = [ 1 1 1 1 1 1 1 1 1 1 1 1 -24 1 1 1 1 1 1 1 1 1 1 1 1] 3) 分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对

数字图像处理实验报告

数字图像处理实验 报告 学生姓名:学号: 专业年级: 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()同样可以通过除以一个常数来改变原始图像的亮度,可用来改变图像的灰度级,其典型运用是比值图像处理。 加法运算的一个重要应用是对同一场景的多幅图像求平均值 减法运算常用于检测变化及运动的物体,图像相减运算又称为图像差分运算,差分运算还可以用于消除图像背景,用于混合图像的分离。

数字图像处理实验报告实验三

中南大学 数字图像处理实验报告实验三数学形态学及其应用

实验三 数学形态学及其应用 一.实验目的 1.了解二值形态学的基本运算 2.掌握基本形态学运算的实现 3.了解形态操作的应用 二.实验基本原理 腐蚀和膨胀是数学形态学最基本的变换,数学形态学的应用几乎覆盖了图像处理的所有领域,给出利用数学形态学对二值图像处理的一些运算。 膨胀就是把连接成分的边界扩大一层的处理。而收缩则是把连接成分的边界点去掉从而缩小一层的处理。 二值形态学 I(x,y), T(i,j)为 0/1图像Θ 腐蚀:[]),(&),(),)((),(0,j i T j y i x I AND y x T I y x E m j i ++=Θ== 膨胀:[]),(&),(),)((),(0 ,j i T j y i x I OR y x T I y x D m j i ++=⊕== 灰度形态学T(i,j)可取10以外的值 腐蚀: []),(),(min ),)((),(1 ,0j i T j y i x I y x T I y x E m j i -++=Θ=-≤≤ 膨胀: []),(),(max ),)((),(1 ,0j i T j y i x I y x T I y x D m j i +++=⊕=-≤≤ 1.腐蚀Erosion: {}x B x B X x ?=Θ: 1B 删两边 2B 删右上 图5-1 剥去一层(皮) 2.膨胀Dilation: {}X B x B X x ↑⊕:= 1B 补两边 2B 补左下 图5-2 添上一层(漆) 3.开运算open :

B B X ⊕Θ=)(X B 4.闭close :∨ Θ⊕=B B X X B )( 5.HMT(Hit-Miss Transform:击中——击不中变换) 条件严格的模板匹配 ),(21T T T =模板由两部分组成。1T :物体,2T :背景。 {} C x x i X T X T X T X ??=?21, 图5-3 击不中变换示意图 性质: (1)φ=2T 时,1T X T X Θ=? (2))()()(21T X T X T X C Θ?Θ=? C T X T X )()(21Θ?Θ= )/()(21T X T X ΘΘ= 6.细化/粗化 (1)细化(Thin ) C T X X T X XoT )(/??=?= 去掉满足匹配条件的点。 图5-4 细化示意图 系统细化{}n B oB XoB T Xo ))(((21=, i B 是1-i B 旋转的结果(90?,180?,270?)共8种情况 适于细化的结构元素 1111000d d I = d d d L 10110 0= (2)粗化(Thick ) )(T X X T X ??=? 用(){}0,01=T (){}0,12=T 时,X X X T X =?=? X 21 1 1 2 3 T ? XoT X ? X X ?T X ΘT T ⊕

matlab图像的灰度变换

实验二 图像的灰度变换 一、实验目的 1、 理解数字图像处理中点运算的基本作用; 2、 掌握对比度调整与灰度直方图均衡化的方法。 二、实验原理 1、对比度调整 如果原图像f (x , y )的灰度范围是[m , M ],我们希望对图像的灰度范围进行线性调整,调整后的图像g (x , y )的灰度范围是[n , N ],那么下述变换: []n m y x f m M n N y x g +---=),(),(就可以实现这一要求。 MATLAB 图像处理工具箱中提供的imadjust 函数,可以实现上述的线性变换对比度调整。imadjust 函数的语法格式为: J = imadjust(I,[low_in high_in], [low_out high_out]) J = imadjust(I, [low_in high_in], [low_out high_out])返回原图像I 经过直方图调整后的新图像J ,[low_in high_in]为原图像中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围,灰度范围可以用 [ ] 空矩阵表示默认范围,默认值为[0, 1]。 不使用imadjust 函数,利用matlab 语言直接编程也很容易实现灰度图像的对比度调整。但运算的过程中应当注意以下问题,由于我们读出的图像数据一般是uint8型,而在MATLAB 的矩阵运算中要求所有的运算变量为double 型(双精度型)。因此读出的图像数据不能直接进行运算,必须将图像数据转换成双精度型数据。 2、直方图均衡化 直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换变成一幅具有均匀灰度概率密度分布的新图像,从而改善图像的灰度层次。 MATLAB 图像处理工具箱中提供的histeq 函数,可以实现直方图的均衡化。 三、实验内容及要求 1、 用MATLAB 在自建的文件夹中建立example2.m 程序文件。在这个文件的程序中,将girl2.bmp 图像文件读出,显示它的图像及灰度直方图(可以发现其灰度值集中在一段区

图像处理实验报告

实验报告 实验课程名称:数字图像处理 班级:学号:姓名: 注:1、每个实验中各项成绩按照10分制评定,每个实验成绩为两项总和20分。 2、平均成绩取三个实验平均成绩。 2016年 4 月18日

实验一 图像的二维离散傅立叶变换 一、实验目的 掌握图像的二维离散傅立叶变换以及性质 二、实验要求 1) 建立输入图像,在64?64的黑色图像矩阵的中心建立16?16的白色矩形图像点阵, 形成图像文件。对输入图像进行二维傅立叶变换,将原始图像及变换图像(三维、中心化)都显示于屏幕上。 2) 调整输入图像中白色矩形的位置,再进行变换,将原始图像及变换图像(三维、中 心化)都显示于屏幕上,比较变换结果。 3) 调整输入图像中白色矩形的尺寸(40?40,4?4),再进行变换,将原始图像及变 换图像(三维、中心化)都显示于屏幕上,比较变换结果。 三、实验仪器设备及软件 HP D538、MATLAB 四、实验原理 傅里叶变换作为分析数字图像的有利工具,因其可分离性、平移性、周期性和共轭对称性可以定量地方分析数字化系统,并且变换后的图像使得时间域和频域间的联系能够方便直观地解决许多问题。实验通过MATLAB 实验该项技能。 设),(y x f 是在空间域上等间隔采样得到的M ×N 的二维离散信号,x 和y 是离散实变量,u 和v 为离散频率变量,则二维离散傅里叶变换对一般地定义为 ∑∑ -=-=+-= 101 )],( 2ex p[),(1 ),(M x N y N yu M xu j y x f MN v u F π,1,0=u …,M-1;y=0,1,…N-1 ∑∑-=-=+=101 )],( 2ex p[),(),(M x N y N uy M ux j v u F y x f π ,1,0=x …,M-1;y=0,1,…N-1 在图像处理中,有事为了讨论上的方便,取M=N ,这样二维离散傅里叶变换对就定义为 ,]) (2ex p[),(1 ),(101 ∑∑ -=-=+- = N x N y N yu xu j y x f N v u F π 1,0,=v u …,N-1 ,]) (2ex p[ ),(1 ),(101 ∑∑-=-=+= N u N v N vy ux j v u F N y x f π 1,0,=y x ,…,N-1 其中,]/)(2exp[N yv xu j +-π是正变换核,]/)(2exp[N vy ux j +π是反变换核。将二维离散傅里叶变换的频谱的平方定义为),(y x f 的功率谱,记为 ),(),(|),(|),(222v u I v u R v u F v u P +== 功率谱反映了二维离散信号的能量在空间频率域上的分布情况。 五、实验步骤、程序及结果: 1、实验步骤: (1)、编写程序建立输入图像; (2)、对上述图像进行二维傅立叶变换,观察其频谱 (3)、改变输入图像中白框的位置,在进行二维傅里叶变换,观察频谱;

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

二○一四~二○一五学年第一学期电子信息工程系 实验报告书 班级:电子信息工程(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);

数字图像实验报告讲解

数 字 图 像 实 验 报 告 学院:计算机与信息工程学院 专业:通信工程 学号:1008224072 姓名:张清峰

实验一图像增强—灰度变换 专业:通信工程学号:1008224072姓名:张清峰 一、实验目的: 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)的亮度。 三、实验内容: 1、图像数据读出 2、计算并分析图像直方图 3、利用直接灰度变换法对图像进行灰度变换 下面给出灰度变化的MATLAB程序 f=imread('C:\ch17\tu\6.jpg'); g=imhist(f,256); imshow(g) %显示其直方图

北航数字图象处理实验报告

数字图像处理实验报告 实验二图像变换实验 1.实验目的 学会对图像进行傅立叶等变换,在频谱上对图像进行分析,增进对图像频域上的感性认识,并用图像变换进行压缩。 2.实验内容 对Lena或cameraman图像进行傅立叶、离散余弦、哈达玛变换。在频域,对比他们的变换后系数矩阵的频谱情况,进一步,通过逆变换观察不同变换下的图像重建质量情况。 3. 实验要求 实验采用获取的图像,为灰度图像,该图像每象素由8比特表示。具体要求如下: (1)输入图像采用实验1所获取的图像(Lena、Cameraman); (2)对图像进行傅立叶变换、获得变换后的系数矩阵; (3)将傅立叶变换后系数矩阵的频谱用图像输出,观察频谱; (4)通过设定门限,将系数矩阵中95%的(小值)系数置为0,对图像进行反变换,获得逆变换后图像; (5)观察逆变换后图像质量,并比较原始图像与逆变后的峰值信噪比(PSNR)。 (6)对输入图像进行离散余弦、哈达玛变换,重复步骤1-5; (7)比较三种变换的频谱情况、以及逆变换后图像的质量(PSNR)。 4. 实验结果 1. DFT的源程序及结果 J=imread('10021033.bmp'); P=fft2(J); for i=0:size(P,1)-1 for j=1:size(P,2) G(i*size(P,2)+j)=P(i+1,j); end end Q=sort(G); for i=1:size(Q,2) if (i=size(Q,2)*0.95) t=Q(i); end end G(abs(G)

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