提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 1.导入图片和从摄像头端加载图片。
- 2.将一张彩色图像进行不同角度的旋转,各种程度的对比度,彩色图像灰度化,裁剪图片。
- 3.不同阈值的二值化处理
- 4.两幅图像相加
- 5.两幅图像相减
- 6.对数2 、5 、15不同程度的变化,指数2 、4 、0.5的不同程度的变换图片。将图片镜像和反色
- 7.直方图和直方图均衡化
- 8.添加高斯和椒盐噪声并分别用不同3*3和5*5模板进行均值、中值、高斯滤波器处理
- 9.分别采用roberts、sobel、拉普拉斯、log、prewitt算子进行边缘提取
- 10.对图像进行巴斯沃特高通、理想高通、高斯高通、巴斯沃特低通、理想低通、高斯低通频域处理,可以设置各种不同的D0处理
- 11.运动模糊再复原,维也纳滤波复原
- 12.傅里叶正变换、腐蚀膨胀开运算和闭运算,形态学滤波
- 13.提取红苹果
- 14.硬币检测
- 15.圆和矩形检测
- 16人脸识别,眼睛识别,嘴巴识别
- 17浮雕、复古风、倒影、羽化、马赛克、素描
1.导入图片和从摄像头端加载图片。
1.1算法原理
1.2代码
[fp,pn,fg]=uigetfile('*.*','选择图片');
I = imread([pn fp]);
axes(handles.axes1);%创建坐标轴图形对象
imshow(I);%显示图像
handles.image = I;
guidata(hObject,handles);%设置为全局图片
%从摄像头端加载图片
vid = videoinput('winvideo', 1, 'YUY2_640x480')
set(vid,'ReturnedColorSpace','rgb');
vidRes=get(vid,'VideoResolution');
width=vidRes(1);
height=vidRes(2);
nBands=get(vid,'NumberOfBands');
hImage=image(zeros(vidRes(2),vidRes(1),nBands));
preview(vid,hImage);
start(vid);
img = getsnapshot(vid);
axes(handles.axes1);
imshow(img);
delete(vid);
handles.image = img;
guidata(hObject,handles);%设置为全局图片
1.3结果及分析
![在这里插入图片描述](https://img-blog.csdnimg.cn/729a211a03c4435b9f91ccb8466102a6.png#pic_center
webcamlist
查看电脑上已经安装的图像适配器
使用如下命令即可预览视频对象,该函数会自动打开一个窗口,播放摄像头画面:
preview(video1)
用完之后清除对象
clear
2.将一张彩色图像进行不同角度的旋转,各种程度的对比度,彩色图像灰度化,裁剪图片。
2.1算法原理
rgb2gray 函数通过消除色调和饱和度信息,同时保留亮度,来将 RGB 图像转换为灰度图
真彩色图像,指定为 m×n×3 数值数组
灰度图像,以 m×n 数值数组形式返回
2.2代码
%图像的对比度
I=handles.image;
num=get(handles.slider2,'value');
I1 = imadjust(I,[0 num],[]);
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
imshow(I1)
%旋转
set(hObject,'Min',0,'Max',360);
I=handles.image;
a=get(handles.slider3,'value');
L=imrotate(I,a);
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
imshow(L);
%做图像裁剪
im = handles.image;
%figure,imshow(im);
imcroped = imcrop; % 直接将figure前置并使鼠标显示十字架让你画框,画完双击就截取了矩形图像
axes(handles.axes2);
imshow(imcroped); %截取后的图像存在imcroped中
2.3结果及分析
分析:B=imrotate(A,angle),将图像A围绕其中心点进行angle角度的逆时针旋转 imadjust函数实现对比度 图像裁剪 imcroped = imcrop; % 直接将figure前置并使鼠标显示十字架让你画框,画完双击就截取了矩形图像3.不同阈值的二值化处理
3.1算法原理
将灰度图像 I 转换为二进制图像
3.2代码
I=handles.image;
mysize = size(I);
%把图像转换成灰度图
if numel(mysize) > 2
I = rgb2gray(I);
end
a=im2double(I);
%全局变量设置的二值化阈值
binary_img = im2bw(a,handles.binary_thresh);
%显示二值化后的图片
axes(handles.axes2)
imshow(binary_img)
3.3结果及分析
分析: 阈值越高,黑色部分越高。4.两幅图像相加
4.1算法原理
存储当做一个二维的矩阵、进一步地,视为二维数组来进行处理。可以想到:如果我们的目的是完成对两张图片的融合,最简单的方法就是把每一个像素点加起来
4.2代码
I = handles.image;%得到第一张全局图像
J=handles.image2;%得到第二张全局图像
H1=imadd(I,J);%两张图像相加
4.3结果及分析
5.两幅图像相减
5.1算法原理
图像减法也称为差分方法,进行代数运算
5.2代码
I = handles.image;%得到第一张全局图像
J=handles.image2;%得到第二张全局图像
%图像相减,要求图像矩阵相同大小
H2=imsubtract(I,J);
imshow(H2);
5.3结果及分析
6.对数2 、5 、15不同程度的变化,指数2 、4 、0.5的不同程度的变换图片。将图片镜像和反色
6.1算法原理
对数函数会扩张低灰度区域压缩高灰度区域,因此低灰度区域细节会增强,图像整体会变亮,而指数函数则相反
反色的实际含义是将R、G、B值反转,若颜色的量化级别是256,则新图的R、G、B值为255减去原图的R、G、B值。
flipdim函数实现图片镜像翻转
6.2代码
%对数变换
I=handles.image;%获取全局图像
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
I=double(rgb2gray(I))/255;
I=log2(1+I)/log2(5);
imshow(I);
% Hint: get(hObject,'Value') returns toggle state of radiobutton4
%指数变换
I=handles.image;%获取全局图像
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
I=double(rgb2gray(I))/255;
c=255;
I = c/255*(I.^2);
imshow(I);
%镜像处理
%图形的几何变换—垂直镜像
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
I = handles.image;
J = flipdim(I,2);%原图像的垂直镜像
imshow(J);
%反色
I=handles.image;
[rows , cols , colors] = size(I);%得到原来图像的矩阵的参数
Res = zeros(rows , cols);%创建一个空矩阵用来存储新的灰度图
Res = uint8(Res);
Res(:,:,1)=255-I(:,:,1);
Res(:,:,2)=255-I(:,:,2);
Res(:,:,3)=255-I(:,:,3);
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
imshow(Res);
6.3结果及分析
分析:彩图是每像素占3个字节,而变化成灰度图后每像素占一个字节,彩图在转化为灰度图的同时,抛弃了颜色信息,只保留了图像亮度信息。指数越大,图像灰度程度就越大,看不清物品。
7.直方图和直方图均衡化
7.1算法原理
直方图均值化,将低灰度值归并,高灰度值拉伸,当一个图像灰度分布均匀时,图像的整体细节与质量会提升很多
7.2代码
%绘制灰度直方图
set(handles.axes4,'HandleVisibility','ON');
axes(handles.axes4);
I = rgb2gray(handles.image);%转换为灰度图
imhist(I);%显示直方图
%直方图均衡化
set(handles.axes4,'HandleVisibility','ON');
axes(handles.axes4);
I = rgb2gray(handles.image);
I = histeq(I);%直方图均衡化
imhist(I);
7.3结果及分析
8.添加高斯和椒盐噪声并分别用不同33和55模板进行均值、中值、高斯滤波器处理
8.1算法原理
均值滤波和中值滤波是都属于空间滤波(对于某一像素点,以该点为中心,通过对该像素点邻域部分的像素进行处理,得到中心替代像素点的滤波方法
如果噪声为高斯噪声,测量值在真实值周围波动,取得平均之后会得到相对准确的值。
如果噪声为椒盐噪声,像素会出现剧烈跳动,而中值对极大值和极小值不敏感,取中值后可以很好过滤掉此类噪声。
8.2代码
%添加椒盐噪声
I = handles.image;
var=get(handles.popupmenu2,'value');
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
J=imnoise(I,'salt & pepper',0.2); %添加椒盐噪声,密度为0.2
imshow(J);
I = handles.image;
%空域滤波去除椒盐噪声实例
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.2); %添加椒盐噪声,密度为0.2
var =get(handles.popupmenu3,'value');
switch var
case 1
K1 = filter2(fspecial('average',3),J)/255;%均值滤波器
K2 = medfilt2(J,[3,3]);%中值滤波器
figure('NumberTitle', 'off', 'Name', '空域滤波去除椒盐噪声');
subplot(2,2,1);
imshow(J);
title('含椒盐噪声的图像');
subplot(2,2,2);
imshow(K1);
title('均值滤波器');
subplot(2,2,3);
imshow(K2);
title('中值滤波器');
case 2
K1 = filter2(fspecial('average',5),J)/255;%均值滤波器
K2 = medfilt2(J,[5,5]);%中值滤波器
figure('NumberTitle', 'off', 'Name', '空域滤波去除椒盐噪声');
subplot(2,2,1);
imshow(J);
title('含椒盐噪声的图像');
subplot(2,2,2);
imshow(K1);
title('均值滤波器');
subplot(2,2,3);
imshow(K2);
title('中值滤波器');
end
%添加高斯噪声
I = handles.image;
var=get(handles.popupmenu2,'value');
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
G=imnoise(I,'gaussian',0,0.2);
imshow(G);%添加高斯噪声,
%做高斯噪声3*3和5*5
I = handles.image;
%空域滤波去除高斯噪声实例
I=rgb2gray(I);
J=imnoise(I,'gaussian',0,0.02); %添加高斯噪声
var =get(handles.popupmenu4,'value');
switch var
case 1
K1 = filter2(fspecial('average',3),J)/255;%均值滤波器
K2 = medfilt2(J,[3,3]);%中值滤波器
figure('NumberTitle', 'off', 'Name', '空域滤波去除高斯噪声');
subplot(2,2,1);
imshow(J);
title('含高斯噪声的灰度图像');
subplot(2,2,2);
imshow(K1);
title('33均值滤波器');
subplot(2,2,3);
imshow(K2);
title('33中值滤波器');
case 2
K1 = filter2(fspecial('average',5),J)/255;%均值滤波器
K2 = medfilt2(J,[5,5]);%中值滤波器
figure('NumberTitle', 'off', 'Name', '空域滤波去除高斯噪声');
subplot(2,2,1);
imshow(J);
title('含高斯噪声的图像');
subplot(2,2,2);
imshow(K1);
title('5*5均值滤波器');
subplot(2,2,3);
imshow(K2);
title('5*5中值滤波器');
end
%高斯平滑滤波器
Image=handles.image;
mysize=size(handles.image);
if numel(mysize)>2
Image=rgb2gray(handles.image);
end
sigma1=0.6; sigma2=10; r=3; % 高斯模板的参数
NoiseI= imnoise(Image,'gaussian'); %加噪
gausFilter1=fspecial('gaussian',[2*r+1 2*r+1],sigma1);
gausFilter2=fspecial('gaussian',[2*r+1 2*r+1],sigma2);
result1=imfilter(NoiseI,gausFilter1,'conv');
result2=imfilter(NoiseI,gausFilter2,'conv');
figure('NumberTitle', 'off', 'Name', '高斯平滑滤波器');
subplot(2,2,1),title('原图'),imshow(Image);
subplot(2,2,2),title('高斯噪声'),imshow(NoiseI);
subplot(2,2,3),title('sigma1'