学号: 0000000000 姓名:0000000实验一灰度变换与空间域滤波一.实验目的及要求1.了解MATLAB的操作环境和图像处理工具箱Image Processing Toolbox的功能;2.加深理解图像灰度变换与空间域滤波概念和算法原理;3.掌握MATLAB中图像灰度变换与空间域滤的实现方法。
二、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
利用MATLAB帮助文档熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
(可将每段程序保存为一个.m文件)1.图像及视频文件的基本操作(1)RGB彩色图像数据的读写操作clear all; %清除工作空间的所有变量,函数,和MEX文件close all; %关闭所有的Figure窗口%查看一幅RGB彩色图像文件的信息fileinfo = imfinfo('Fig0701_fruits.jpg')%暂停,阅读命令窗口中的结果,按空格键继续pause;%读取该图像I=imread('Fig0701_fruits.jpg');%显示图像imshow(I); title('Original RGB true color image');%查看图像像素信息,在图像上移动鼠标,注意左下角的信息impixelinfo;%暂停,按空格键继续pause;% 读取图像的颜色分量,并保存到二维矩阵变量中IR = I(:,:,1);IG = I(:,:,2);IB = I(:,:,3);%以灰度图像的方式显示各颜色分量figure, imshow(IR); title('R分量');figure, imshow(IG); title('G分量');figure, imshow(IB); title('B分量');%在图像左上角画一条5像素宽、100像素长的水平稍暗红线I(31:35,61:160,1)=200;I(31:35,61:160,2)=0;I(31:35,61:160,3)=0;%%显示处理结果figure, imshow(I); title('在图像背景中画红线');%将结果保存为tif格式图像文件imwrite(I,'fruits_bar.tif');%--------------------------------------------------------------------------------(2)索引图像与 RGB彩色图像之间的转换close all;clear all;%读入一幅RGB彩色图像IRGB=imread('Fig0701_fruits.jpg');%显示读入的RGB彩色图像figure, imshow(IRGB); title(' Original RGB image');%把RGB彩色图像转换为索引图像,为了比较差异,选择颜色表中的颜色数量为64 [Xind, map] = rgb2ind(IRGB,64);%显示转换后的索引图像figure, imshow(Xind, map); title('Converted to Indexd image');%将结果保存为tif格式图像文件imwrite(Xind,map,'fruits_indexed.tif');%读入一幅彩色索引图像并显示[Ind, map2]=imread('trees.tif');figure, imshow(Ind, map2); title(' Original Indexd image');%查看图像像素信息,在图像上移动鼠标,注意左下角的信息impixelinfo;%暂停,按空格键继续pause;%把索引图像转换为RGB彩色图像Irgb = ind2rgb(Ind, map2);%显示得到的彩色图像figure, imshow(Irgb); title('Converted to RGB image');%将结果保存为jpg格式图像文件imwrite(Irgb,'trees_rgb.jpg');%--------------------------------------------------------------------------(3)彩色图像转换为灰度图像和无彩色图像close all;clear all;%读取一幅RGB彩色图像Irgb=imread('Fig0701_fruits.jpg');%将其转换为灰度图像Igray1 = rgb2gray(Irgb);%显示转换结果figure, imshow(Irgb); title('Original RGB image');figure, imshow(Igray1); title('Converted gray image');%将上述RGB彩色图像转换为无彩(灰色)彩色图像,%即转换后的图像数据仍为RGB彩色图像格式%创建一个与真彩色图像转维数相同的uint8型矩阵Iachro=uint8(zeros(size(Irgb)));%Iachro (:,:,1)=Igray1;Iachro (:,:,2)=Igray1;Iachro (:,:,3)=Igray1;%显示转换的无彩色图片figure, imshow(Iachro); title('Converted achromatic color image'); %--------------------------------------------------------------------------------(4)灰度彩色图像转换为二值图像clc,clear, close all, close all;%读取一幅灰度图像并显示I = imread('rice.png');figure, imshow(I);%利用阈值分割把灰度图像转换为二值图像level = graythresh(I);bw = im2bw(I, level);%显示转换后的图像figure, imshow(bw); title('Converted binary image');%查看图像像素信息,在图像上移动鼠标,注意左下角的信息impixelinfo;%----------------------------------------------------------------------------(5)视频文件的读取及图像帧的抽取(选作)%采用参考图像实现运动目标分割% 该m文件使用参考图像实现背景减法% 用于移动对象分割clear all; close all;%构造一个videoreader类来读取avi文件,首先是'traffic.avi' , % 然后是‘highwayII_raw.avi'.videoObj = VideoReader('traffic.avi');numFrames =videoObj.NumberOfFrames;% 读取视频序列中的第一帧作为参考背景图像newframe = read(videoObj, 1);Iref = double(newframe);% 获取框架的高度、宽度和颜色组件的数量[height, width, numColor]=size(newframe);% 为阈值指定一个值Threh = 20;fg = zeros(height, width);% 为了避免消耗太多的内存,每次只读取一个帧for n = 1:numFramesnewframe = read(videoObj, n);% 计算新帧之间的绝对差值% 和参考帧IrefIdiff = abs(double(newframe) - Iref);%运动段,通过检测运动物体的运动轨迹fg = Idiff >Threh;if ( numColor == 3) % color imagefg = fg(:, :, 1) | fg(:, :, 2) | fg(:, :, 3);endpause(0.1);figure(1);subplot(1,2,1), imshow(newframe);title(strcat('Current Image, No. ', int2str(n)));subplot(1,2,2), imshow(fg);title('Segmented result using reference image');end %------------------------------------------------------------2. 图像灰度变换(1)使用工具箱函数 i madjust 的直接灰度变换clear all; close allI = imread('cameraman.tif');J = imadjust(I,[0 0.2],[0.5 1]);imshow(I)figure, imshow(J)[X,map] = imread('forest.tif');figure,imshow(X,map)I2 = ind2gray(X,map);J2 = imadjust(I2,[],[],0.5);figure,imshow(I2);figure, imshow(J2);J3 = imadjust(I2,[],[],1.5);figure, imshow(J3);help imadjust %显示imadjust()函数信息功能:灰度变换就是把原图像的像素灰度经过某个变换函数变换成新的图像灰度。
直接灰度变换法有线性、分段线性以及非线性变换。
(2)直方图均衡化% 清除MATLAB工作区的任何变量并关闭打开的图形窗口clear all; close all;% 读取示例图像,并将其存储在名为I的数组中,然后显示图像I = imread('Fig0310(b)(washed_out_pollen_image).tif');imshow(I);% 创建图像的直方图,并在一个新的图形窗口中显示它figure, imhist(I);% 直方图均衡化[I2,T] = histeq(I);% 在一个新的图形窗口中显示新的均衡图像I2figure, imshow(I2) ;% 创建一个直方图的均衡图像I2figure, imhist(I2);% 绘制变换曲线figure,plot((0:255)/255,T);% 将新调整后的图像I2写入名为“花粉image2.tif”的磁盘文件imwrite (I2, 'pollen_image2.tif');% 检查新写文件的内容imfinfo('pollen_image2.tif')%------------------------------------------------------------%功能:直方图均衡化的基本思想是将原始图像的直方图变换为均匀分布的形式,从而增加图像灰度的动态范围,达到增强图像对比度的效果。