Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
本博客主要记录我学习运用matlab进行一些基本的图像处理的一些笔记,如果有不当的地方,欢迎批评指正,一起学习,一起进步。
本篇是第一篇,只涉及到一些基本的操作,涉及到的知识点如下:
1、二值化
2、开操作
3、连通区域提取
4、连通区域的重心提取
5、BoundingBox提取
各操作背后的理论基础,大都可以在冈萨雷斯的数字图像处理中找到,而且matlab的帮助中会给出实现算法的论文出处。感兴趣的朋友可以深入研究。
图像处理,第一步一般是进行二值化,而二值化最常用的方法就是ostu方法。matlab可以用level=graythresh(src)直接获取二值化的阈值。之后用im2bw二值化图像。
处理图像时经常运用到一些形态学图像处理方法,而幸好matlab就为我们提供了强有力的形态学处理工具箱。本学习笔记运用到了开操作对图像进行处理,可以消除一些噪点。
获取连通区域之后,我们可能会想知道该区域的一些属性(如重心、边界框等),matlab的regionprops为我们提供了大量的属性,只要一个命令就可搞定,regionprops。
本例程的code如下:
%function: % 获取感兴趣区域,并进行提取、标记 % 源图像位于E:\ProgramFiles\MATLAB\R2013b\toolbox\images\imdemos % 具体路径因个人电脑而异 %date:2015-1-7 %author:chenyanan %清空变量,读取图像,并显示其属性 clear;close all src = imread(\'images/rice.png\'); whos, %显示原始图像 figure(\'name\',\'myapp\'), subplot(2,2,1),imshow(src),title(\'src\') %用ostu方法获取二值化阈值,进行二值化并进行显示 level=graythresh(src); bw=im2bw(src,level); subplot(2,2,2),imshow(bw),title(\'bw\') %运用开操作消去噪点 se = strel(\'disk\',2); openbw=imopen(bw,se); subplot(2,2,3),imshow(openbw),title(\'open\') %获取连通区域,并进行显示 L = bwlabel(openbw,4); RGB = label2rgb(L); subplot(2,2,4),imshow(RGB),title(\'rgb\') %获取区域的\'basic\'属性, \'Area\', \'Centroid\', and \'BoundingBox\' stats = regionprops(openbw, \'basic\'); centroids = cat(1, stats.Centroid); figure(\'name\',\'regionprops\'), %绘制开操作之后的二值化图像 imshow(openbw),title(\'centroids\') hold on %绘制重心 plot(centroids(:,1), centroids(:,2), \'b*\'), %绘制感兴趣区域ROI for i=1:size(stats) rectangle(\'Position\',[stats(i).BoundingBox],\'LineWidth\',2,\'LineStyle\',\'--\',\'EdgeColor\',\'r\'), end hold off
运行效果的图片如下:
请发表评论