提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
本次制作了一个图像处理小工具,可以对图像进行如亮度调节、旋转、左右上下翻转等基础变换。进行灰度变换并显示其直方图、反色、二值化、图像合成、运动轨迹检测。可对图像添加噪声、滤波器、边缘提取并进行对比。选择不同的结构元素进行开运算、闭运算、膨胀运算、腐蚀运算。实现了对图中硬币的检测计数、提取红色目标图像和形状检测。
功能模块
1.图像选择
1.1 算法实现
[filename,pathname]=uigetfile({'*.jpg;*.png;*.jpeg;*.tif'},'选择一张图片'
);
image=[pathname filename];%获取文件路径文件名
if (filename==0)
warndlg('请选择一张图片!','Warning');%提示选择图片
return;
else
im = imread(image); %读取图片数据到矩阵im
axes(handles.axes1);
imshow(im);%显示
handles.filename=filename;
handles.image=image;%文件名字和图片信息保存到结构体
end
guidata(hObject,handles);%更新结构体
1.2实验结果
2.图像清除与退出
2.1算法设计
cla(handles.axes2,'reset');
cla(handles.axes5,'reset');
cla(handles.axes6,'reset');
cla(handles.axes7,'reset');
cla(handles.axes9,'reset');
close all;
3 亮度调节、旋转、翻转
3.1 算法原理
定义全局变量x获取滑动条数值,用imadd(img,x)调节图像亮度;imrotate(img,x)实现旋转;flipud(image),fliplr(img)实现图像上下左右翻转。
3.2 算法设计
global x;
x=get(hObject,'value');%获取滑动条值
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
img=imread(handles.image);
imageout=imadd(img,x);
axes(handles.axes2);
imshow(imageout);
img=imread(handles.image);
img=imrotate(img,x);%img逆时针方向旋转x度
axes(handles.axes2);
imshow(img);
img=imread(handles.image);
img=fliplr(img);
axes(handles.axes2);
imshow(img);
image=imread(handles.image);
image=flipud(image);
axes(handles.axes2);
imshow(image);
3.3 实验结果
4图像灰度化
4.1 算法原理
通过rgb2gray 函数消除图像色调和饱和度信息,同时保留亮度实现将将RGB图像或彩色图转换为灰度图像。
4.2 算法设计
image=imread(handles.image);
image=rgb2gray(image);%转化为灰度图
axes(handles.axes2);cla;
imshow(image);
colormap(handles.axes2,gray(256));%修改画布映射
4.3 实验结果
5灰度图像二值化
5.1 算法原理
设定一个阈值,当原始图像像素的数值大于这个阈值的时候,就把这个像素颜色分量置为255,如果数值小于这个阈值,就把这个像素颜色分量置为0。
5.2 算法设计
handles.image=imread(handles.image);
handles.image=rgb2gray(handles.image);%转化为灰度图
handles.image=imbinarize(handles.image,0.5);%转化为二值图
axes(handles.axes2);
imshow(handles.image);
5.3 实验结果
6指数变换 对数变换
6.1 算法原理
指数变换:指数大于1变暗,小于1变亮。增大高低灰度区对比度。
对数变换:因为对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率较小,所以图像经过对数变换后高灰度值部分对比提升,有增强图像效果。
6.2 算法设计
img=imread(handles.image);
im=rgb2gray(img);%转化为灰度图
im1=histeq(img);%对原图进行直方图均衡化处理
axes(handles.axes5);
imhist(im1);
imgoutput=1.5.^(im*0.1)-1;%指数变换 高灰度区拉伸
axes(handles.axes2);
imshow(imgoutput,[]);
axes(handles.axes6);%预览图直方图
imhist(imgoutput);
img=imread(handles.image);
imgoutput=rgb2gray(img);%转化为灰度图
im1=histeq(img);%对原图进行直方图均衡化处理
axes(handles.axes5);
imhist(im1);
v=5;%v越大灰度提高越明显
m=mat2gray(double(imgoutput));
%灰度归一化 mat2gray把任意任意类型图像矩阵转换为取值范围为[0,1]的归一化double类数组。
imgoutput=log(1+v*m)/(log(v+1));%对数变换
axes(handles.axes2);
imshow(imgoutput,[]);
axes(handles.axes6);%预览图直方图
imhist(imgoutput);
4.3 实验结果