课程设计报告
姓 名: 学 号:
班 级: .net 设计题目: 图像处理 教 师: 赵哲 老师 提交日期: 12月29日
一、设计内容: 主题:《图像处理》
详细说明:对图像进行处理(简单滤镜,模糊,锐化,高斯模糊等),对图像进行处理(上下对称,左右对称,单双色显示,亮暗程度调整等),对图像进行特效处理(反色,实色混合,色彩平衡,浮雕效果,素描效果,雾化效果等),
二、涉及知识内容: 1、二值化 2、各种滤波 3、算法等
三、设计流程图
插入图片 对图片进行处理 二值化处理 重复 输出两幅图 结束 四、实例分析及截图效果: 运行效果截图:
第一步:读取原图,并显示
close all;clear;clc;
% 清楚工作窗口clc 清空变量clear 关闭打开的窗口close all I=imread('1.jpg'); % 插入图片1.jpg 赋给I
imshow(I);% 输出图I
I1=rgb2gray(I);%图片变灰度图 figure%新建窗口
subplot(321);% 3行2列第一幅图 imhist(I1);%输出图片 title('原图直方图');%图片名称
一,图像处理 模糊
H=fspecial('motion',40); %% 滤波算子 模糊程度40 motion运动
q=imfilter(I,H,'replicate');%imfilter实现线性空间滤波函数,I图经过H滤波处理,replicate反复复制 q1=rgb2gray(q); imhist(q1);
title('模糊图直方图');
二,图像处理 锐化
H=fspecial('unsharp');%锐化滤波算子,unsharp不清晰的 qq=imfilter(I,H,'replicate'); qq1=rgb2gray(qq); imhist(qq1); title('锐化图直方图');
三,图像处理 浮雕(来源网络)
%浮雕图
l=imread('1.jpg');
f0=rgb2gray(l);%变灰度图
f1=imnoise(f0,'speckle',0.01);
%高斯噪声 加入密度为0.01的高斯乘性噪声 imnoise噪声污染图像函数 speckle斑点 f1=im2double(f1);%把图像数据类型转换为双精度浮点类型 h3=1/9.*[1 1 1;1 1 1;1 1 1]; %采用h3对图像f2进行卷积滤波 f4=conv2(f1,h3,'same'); %进行sobel滤波
h2=fspecial('sobel');
g3=filter2(h2,f1,'same');%卷积和多项式相乘 same相同的 k=mat2gray(g3);% 实现图像矩阵的归一化操作
四,图像处理 素描(来源网络)
f=imread('1.jpg');
[VG,A,PPG] = colorgrad(f); ppg = im2uint8(PPG); ppgf = 255 - ppg;
[M,N] = size(ppgf);T=200; ppgf1 = zeros(M,N);
for ii = 1:M for jj = 1:N if ppgf(ii,jj) ppgf1 = uint8(ppgf1); H=fspecial('unsharp'); Motionblur=imfilter(ppgf1,H,'replicate'); figure;imshow(ppgf1); 调用 function [VG, A, PPG] = colorgrad(f, T) if (ndims(f)~=3) || (size(f,3)~=3) error('Input image must be RGB'); end sh = fspecial('sobel'); sv = sh'; Rx = imfilter(double(f(:,:,1)), sh, 'replicate'); Ry = imfilter(double(f(:,:,1)), sv, 'replicate'); Gx = imfilter(double(f(:,:,2)), sh, 'replicate'); Gy = imfilter(double(f(:,:,2)), sv, 'replicate'); Bx = imfilter(double(f(:,:,3)), sh, 'replicate'); By = imfilter(double(f(:,:,3)), sv, 'replicate'); gxx = Rx.^2 + Gx.^2 + Bx.^2; gyy = Ry.^2 + Gy.^2 + By.^2; gxy = Rx.*Ry + Gx.*Gy + Bx.*By; A = 0.5*(atan(2*gxy./(gxx-gyy+eps))); G1 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(2*A) + 2*gxy.*sin(2*A)); A = A + pi/2; G2 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(2*A) + 2*gxy.*sin(2*A)); G1 = G1.^0.5; G2 = G2.^0.5; VG = mat2gray(max(G1, G2)); RG = sqrt(Rx.^2 + Ry.^2); GG = sqrt(Gx.^2 + Gy.^2); BG = sqrt(Bx.^2 + By.^2); PPG = mat2gray(RG + GG + BG); if nargin ==2 VG = (VG>T).*VG; PPG = (PPG>T).*PPG; end f1=rgb2gray(f); imhist(f1); title('素描图直方图'); 五,图像处理 实色混合(来源网络) %实色混合 I(I<=127)=0; %对像素进行处理,若值小于等于127,置0 I(I>127)=255; %对像素进行处理,若值大于127,置255 imshow(I); title('像素图'); I1=rgb2gray(f); imhist(I1); title('像素图直方图'); 六,图像处理 反色图 f=imread('1.jpg'); q=255-q; imshow(q); title('反色图'); imhist(q1); title('反色图直方图'); 七,图像处理 上下对称 A=imread('1.jpg'); B=A; [a,b,c]=size(A); a1=floor(a/2); b1=floor(b/2); c1=floor(c/2); B(1:a1,1:b,1:c)=A(a:-1:a-a1+1,1:b,1:c); figure imshow(B) title('上下对称'); A=rgb2gray(A); figure imhist(A) title('上下对称直方图'); 八,图像处理类 左右对称 C=imread('1.jpg'); A=C; C(1:a,1:b1,1:c)=A(1:a,b:-1:b+1-b1,1:c); figure imshow(C) title('左右对称'); A=rgb2gray(A); figure imhist(A); title('左右对称直方图'); 九,图像 处理 单双色显示 a=imread('1.jpg'); a1=a(:,:,1);a2=a(:,:,2); a3=a(:,:,3); aa=rgb2gray(a); a4=cat(3,a1,aa,aa); a5=cat(3,a1,a2,aa); figure subplot(121); imshow(a4); title('单色显示'); subplot(122); imshow(a5); title('双色显示'); a4=rgb2gray(a4); a5=rgb2gray(a5); figure subplot(121); imhist(a4); title('单色显示直方图'); subplot(122); imhist(a5); title('双色显示直方图'); 十,图像处理 亮暗度调整 a=imread('1.jpg'); a1=0.8*a; a2=2*a; figure subplot(121);imshow(a1); title('暗图'); subplot(122); imshow(a2); title('亮图') q3=rgb2gray(a1);q4=rgb2gray(a2); figure subplot(121);mhist(q3);title('暗图直方图') subplot(122); imhist(q4); title('亮图直方图') 十一,图像处理 雾化处理 q=imread('1.jpg'); m=size(q,1);n=size(q,2); r=q(:,:,1);g=q(:,:,2);b=q(:,:,3); for i=2:m-10 for j=2:n-10 k=rand(1)*10;%产生一个随机数作为半径 di=i+round(mod(k,33));%得到随机横坐标 dj=j+round(mod(k,33));%得到随机纵坐标 r(i,j)=r(di,dj);%将原像素点用随机像素点代替 g(i,j)=g(di,dj); b(i,j)=b(di,dj); end end a(:,:,1)=r;a(:,:,2)=g;a(:,:,3)=b; imshow(a) title('雾化处理图'); q=rgb2gray(a); figure imhist(q); title('雾化处理图直方图'); 十二,图像处理 高斯滤波 I = imread('1.jpg'); G =fspecial('gaussian', [5 5], 2); % fspecial生成一个高斯滤波器 Ig =imfilter(I,G,'same'); %imfilter使用该滤波器处理图片 imshow(Ig); title('高斯滤波'); I1=rgb2gray(Ig); figure imhist(I1); title('高斯滤波直方图'); 十三,图像处理 色彩平衡(来自网络) im=imread('1.jpg'); im2=im;%存储元图像 im1=rgb2ycbcr(im); %将im RGB图像转换为YCbCr空间。YCbCr空间 Y亮度信息。 Cb是蓝色分量和一个参考值得差 %Cr是红色分量和一个参考值得差。? %im1是一个M*N*3的矩阵。 Lu=im1(:,:,1);%获取亮度分量 ?是一个M*N矩阵 Cb=im1(:,:,2);%获取蓝色偏差量 ?Cb是一个M*N的矩阵 Cr=im1(:,:,3);%获取红色偏差量 ?Cr是一个M*N的矩阵 [x y z]=size(im);%获得im的size将值赋给x=M y=N z=3. tst=zeros(x,y); %建立一个M*N的0矩阵tst Mb=sum(sum(Cb)); %sum(Cb)将每一列相加得到一个N维行向量。 sum(sum(Cb))将行向量元素相加。得到一个数Mb Mr=sum(sum(Cr));%同理得到Mr Mb=Mb/(x*y); Mr=Mr/(x*y);%Mb,Mr分别除以x*y. 得到蓝色和红色的均值。 Db=sum(sum(Cb-Mb))/(x*y); Dr=sum(sum(Cr-Mr))/(x*y); %得到b,r的方差 cnt=1; for i=1:x for j=1:y b1=Cb(i,j)-(Mb+Db*sign(Mb)); b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr)); if (b1<(1.5*Db) & b2<(1.5*Dr)); Ciny(cnt)=Lu(i,j); %获得一个列向量Ciny维度为cnt-1 tst(i,j)=Lu(i,j); cnt=cnt+1; end end end cnt=cnt-1; iy=sort(Ciny,'descend');%将列向量Ciny元素降序排列 nn=round(cnt/10); Ciny2(1:nn)=iy(1:nn); %将iy的1到nn个元素复制给Ciny2 mn=min(Ciny2); c=0; for i=1:x for j=1:y if tst(i,j) R=im(:,:,1); G=im(:,:,2); B=im(:,:,3); R=double(R).*tst; %将R元素与tst元素对应相乘 G=double(G).*tst; B=double(B).*tst; Rav=mean(mean(R));%求均值先列后行 Gav=mean(mean(G)); Bav=mean(mean(B)); Ymax=double(max(max(Lu)))/15; Rgain=Ymax/Rav; Ggain=Ymax/Gav; Bgain=Ymax/Bav; im(:,:,1)=im(:,:,1)*Rgain; im(:,:,2)=im(:,:,2)*Ggain; im(:,:,3)=im(:,:,3)*Bgain; W=im; figure,imshow(im2,[]),title('原始图像'); figure,imshow(im,[]),title('色彩平衡处理后的图像'); im1=rgb2gray(im); % subplot(326); figure imhist(im1); title('色彩平衡处理后直方图'); 十四,图像处理 明暗反转(网络) f = imread('1.jpg'); % f = rgb2gray(f); g1 = imadjust(f, [0 1], [1 0]); g2 = imadjust(f, [0.5 0.75], [0 1]); imshow(g2); title('明暗反转'); figure g = rgb2gray(g2); imhist(g); title('明暗反转直方图'); 十五,图像处理 反转负冲效果(负片图片) f = imread('1.jpg'); g =imcomplement(f);%IPT函数imcomplement imshow(g); title('负片图片'); g1=rgb2gray(g); figure imhist(g1); title('负片图片直方图'); %明暗反转功能让这种获得明暗反转图像的过程可用于增强潜入在大片黑色区域中的白色或灰色细节 十六,图像处理 直方图均衡化 a=imread('1.jpg'); b=rgb2gray(a); imshow(b); c=histeq(b); %直方图均衡化 imshow(c); title('直方图均衡化'); figure imhist(c); title('直方图均衡化直方图'); 十七,图像处理 椒盐噪声 M=imread('1.jpg') ; P2=imnoise(M,'salt & pepper',0.02); %加入椒盐噪声 imshow(P2); title('椒盐噪声 '); qq=rgb2gray(P2); figure imhist(qq); title('椒盐噪声直方图'); 十八,图像处理 高斯噪声 M=imread('1.jpg') ; P1=imnoise(M,'gaussian',0.02); %加入高斯噪声 imshow(P1) ; title('高斯噪声 '); qq=rgb2gray(P1); figure imhist(qq); title('高斯噪声直方图'); 十九,图像处理类一 二十,图像处理类一 二十一,图像处理类一 二十二,图像处理类一 二十三,图像处理类一 二十四,图像处理类一 二十五,图像处理类一 五, 六、心得体会 这次实验有很多效果都没做出来,木刻效果没有找到代码也没头绪,剪纸效果做了很久做不出来,只知道要先变成灰度图,调整对比度,只显示黑白两色,去掉黑色,变成只有红白色的图片就回具有剪纸效果。很多知识都想不起来代码,过程忘了,尤其是转换色彩空间做冰冻连环画效果,做了很久,也百度了很久,找不到转换。 这次实验最大认知就是知道的Matlab有多么的高大上,可以做动漫,可以做PS里的几乎所有功能,比PS更加细致化,数字化,对图像处理的特效,可以随心所欲的做处理。 可惜时间不多,也没有做出更多的效果,深表遗憾,对知识的掌握不熟练,书上得来终觉浅,课下会更多的实践,去了解,去学习,去实践,去对Matlab做更深入的学习。 七、程序资料清单和源代码 均来自百度百科 因篇幅问题不能全部显示,请点此查看更多更全内容