重庆大学数字图像处理实验以及完整源代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三选作部分代码 A = imread('实验 3 原图.jpg'); A=im2double(A); [m,n]=size(A); block_size=5; k = floor(block_size/2); A2 = zeros(m+2*k,n+2*k); A2(k+1:m+k,k+1:n+k) = A(1:m,1:n); %four corners A2(1:k,1:k) = A(1,1); % Upper left corner. A2(1:k,n+k+1:n+2*k) = A(1,n); % Upper right corner. A2(m+k+1:m+2*k,1:k) = A(m,1); % Lower left corner. A2(m+k+1:m+2*k,n+k+1:n+2*k) = A(m,n); % Lower right corner. % four sides for i = 1:k A2(i,k+1:n+k) = A(1,1:n); A2(m+k+i,k+1:n+k) = A(m,1:n); A2(k+1:m+k,i) = A(1:m,1); A2(k+1:m+k,n+k+i) = A(1:m,n); end;
实验三代码 1. 将下列函数保存成文件 mymidfilt.m
function B=mymidfilt(file_name, block_size) A = imread(file_name); [m,n] = size(A); k = floor(block_size/2); A2 = zeros(m+2*k,n+2*k); A2(k+1:m+k,k+1:n+k) = A; %four corners A2(1:k,1:k) = A(1,1); % Upper left corner. A2(1:k,n+k+1:n+2*k) = A(1,n); % Upper right corner. A2(m+k+1:m+2*k,1:k) = A(m,1); % Lower left corner. A2(m+k+1:m+2*k,n+k+1:n+2*k) = A(m,n); % Lower right corner. % four sides for i = 1:k A2(i,k+1:n+k) = A(1,1:n); A2(m+k+i,k+1:n+k) = A(m,1:n); A2(k+1:m+k,i) = A(1:m,1); A2(k+1:m+k,n+k+i) = A(1:m,n); end;
实验一图象灰度变换(2学时)
一、 实验目的: 理解数字图象处理的基本过程,掌握常用图象灰度变换算法,观察图像图象灰度 变换的结果,加深对数字图象基本概念的理解。 二、 实验内容: 1、灰度线性变换 变换函数为 : s = a r + b设计程序, 实现 (a>1,b=0) 、 (0<a<1, b=0) 、 (a=1,b>0) 和(a=1,b<0)等情况下的灰度变换处理,并比较处理前后的图象效果。 2、图象二值化 设计程序,实现图象的二值化。并给出三种门限下的处理结果。 3、负象变换 设计程序,实现图象的反转操作(负象变换),并比较处理前后的图象结果。 4、灰度非线性变换(选做内容) 设计程序,实现图象的指数变换和对数变换。 三、 实验步骤: 1、 获取实验用图像: 使用imread函数将图像读入Matlab, 用size函数 (或imfinfo函数) 获取图象大小。 2、产生灰度变换函数:s = a r + b 用imshow函数分别观察在(a>1,b=0)、 (0<a<1, b=0)、 (a=1,b>0)和(a=1,b<0) 四情况下处理前后的结果。适当选择参数,使处理结果达到较好的效果。记录下 所对应的参数。 3、用imwrite函数保存处理图象结果。 4、设计门限化方法实现图象的二值化的变换函数,并进行程序设计实现。分别选择 三个门限值,观察处理结果。 5、设计实现反转操作的变换函数,并进行程序设计实现。观察处理结果。 6、分别设计实现图象的指数变换和对数变换的变换函数,参数自己选定,并比较处 理前后的图象结果。(选做内容) 四、 实验报告要求: 画出算法的规范化程序设计流程图。用plot等函数生成各类灰度变换函数曲线,用 imshow函数显示处理前后图象。在实验报告中提交原图像和各种变换函数的曲线,以 及按各种变换函数处理后的图像,并进行实验结果分析。选做内容可不写入报告中。
n
四、 实验步骤: 1)读入图像;2)创建合适的滑动窗口;3)将该窗口内的图像灰度值重新排序; 4)将排序后位于中间的数值作为中值;5)用中值取代被处理像素的原灰度值;6)滑 动窗口到下一个位置,重复3)~5)。 五、 实验报告要求: 按统一规定的实验报告格式提交报告。画出算法的规范化程序设计流程图。应包 含程序清单, 处理前后的图像特征比较及编程的心得体会 (指编程过程中的难点及如何 克服它的)。
实验一代码 R=imread('实验 1 原图.jpg'); [m,n]=size(R) figure, imshow(R);title('原图 1'); S1=R*3; figure, imshow(S1);title('a=3,b=0'); imwrite(S1,'1.21.jpg'); N=im2double(R); S2=N*0.5; figure, imshow(S2);title('a=0.5,b=0'); imwrite(S2,'1.22.jpg'); S3=R+10; figure, imshow(S3);title('a=1,b=10'); imwrite(S3,'1.23.jpg'); S4=N+0.5; figure, imshow(S4);title('a=1,b=0.5'); imwrite(S4,'1.24.jpg'); X1=R>64; figure, imshow(X1);title('门限值为 64'); imwrite(X1,'1.41.jpg'); X2=R>128; figure, imshow(X2);title('门限值为 128'); imwrite(X2,'1.42.jpg'); X3=R>192; figure, imshow(X3);title('门限值为 192'); imwrite(X3,'1.43.jpg'); Y=255-R; figure, imshow(Y);title('反转后的图像'); imwrite(Y,'1.51.jpg'); Z1=N.^0.6; figure, imshow(Z1);title('指数变换后的图像'); imwrite(Z1,'1.61.jpg'); Z2=log(N+1) %Z3=im2uint8(Z2) figure,imshow(Z3); figure,imshow(Z2,[]);title('对数变换后的图像'); imwrite(Z2,'1.62.jpg');
实验二代码 X=imread('实验 2 原图.jpg'); [m,n]=size(X) h=zeros(256); for i=1:256 t=(X==(i-1)); h(i)=sum(t(:)); end a=0:255; figure,imshow(X);title('原图 2'); figure,bar(a,h);title('原图直方图'); num=numel(X); c=cumsum(h); Y=round(c/num*256); W=zeros(m,n); for i=1:256 W1=Y(i)*(X==i-1); W=W1+W; W=round(W); end for i=1:256 t=(W==(i-1)); h(i)=sum(t(:)); end W=uint8(W); figure,imshow(W);title('均衡化后的图'); figure,bar(a,h);title('均衡化后的直方图'); imwrite(W,'2.6.jpg');
% Upper. % Lower. % Left. % Right.
B=zeros(m,n); pixel_block = zeros(1,block_size^2); for i = 1:m for j = 1:n k = floor(block_size/2); pixel_block = reshape(A2(i:i+2*k,j:j+2*k),1,block_size^2); sorted_block = sort(pixel_block); median_position = ceil(block_size^2 / 2); block_median = sorted_block (median_position); B(i,j) = block_median; end; end; B = uint8(B);
实验三图像中值滤波(2学时)
一、 实验目的: 进一步加深理解和掌握中值滤波的原理和具体算法。能解释用大小和形状不同的 滑动窗口进行中值滤波后图像所呈现的一些特征。 二、 实验内容: 1、矩形邻域中值滤波设计程序,实现3× 3邻域中值滤波。比较处理前后图像效果。 2、十字形中值滤波(选做) 设计程序,实现5× 5十字形中值滤波。比较处理前后图像效果。 三、 实验原理: 对于给定的n个数值{a1, a2, …an}, 将它们按大小有序排列。当n为奇数时,位于中间位 置的那个数值称为这n个数值的中值。记作 med [a1, a2, …an] 设x为M× N待处理图像,经窗口为Wn的中值滤波后,被处理像点(i, j)的输出为: )],([),(),(jixmedjiyjiWn= 式中W (i, j)表示点(i, j)的邻域,它含有n个像素。
实验二图象直方图及均衡(2学时)
一、 实验目的: 理解图象灰度直方图的概念,掌握图象直方图的计算方法;掌握直方图均衡化图 象增强技术,理解均衡化的处理过程。 二、 实验内容: 1、图象直方图 设计程序,计算图象直方图。 2、直方图均衡化 设计程序,实现图象直方图均衡化处理,并比较处理前后图象。 三、 实验步骤: 1、获取实验用图像:使用imread函数将图像读入Matlab用size函数(或imfinfo函数) 获取图象大小。 2、计算图象的灰度直方图,并用plot等函数生成灰度直方图。 3、设计直方图均衡化算法,并进行程序设计实现。 4、根据直方图均衡化的灰度变换函数实现图象灰度的映射变换,获得均衡化的图象 结果。 5、计算均衡化图象的灰度直方图,并用plot等函数生成灰度Leabharlann Baidu方图。 6、用imwrite函数保存处理图象结果。 四、 实验报告要求: 画出直方图均衡化算法的规范化程序设计流程图。用 imshow函数显示处理前后图 象,用plot等函数生成原始图象和处理图象的灰度直方图,并进行实验结果分析。
% Upper. % Lower. % Left. % Right.
B=zeros(m,n); B0=zeros(1,9); B1 = zeros(1,block_size^2); for i = 1:m for j = 1:n k = floor(block_size/2); B1= reshape(A2(i:i+2*k,j:j+2*k),1,block_size^2); B0=[B1(3) B1(8) B1(11) B1(12) B1(13) B1(14) B1(15) B1(18) B1(23)]; B0= sort(B0); block_median = B0(5); B(i,j)=block_median; end; end; figure,imshow(B);title('5X5 十字变换后图像'); imwrite(B,'3.2.jpg');
2. 调用函数mymidfilt R=imread('实验 3 原图.jpg'); figure, imshow(R);title('原图 3'); X=mymidfilt('实验 3 原图.jpg', 5); figure, imshow(X);title('中值滤波后的图像'); imwrite(X,'3.1.jpg');