matlab常用的一些程序和功能
~ 去除误匹配算法(matlab)
1.ransac算法
[tform,matchedPoints1,matchedPoints2] = ...
estimateGeometricTransform(matchedPoints1,matchedPoints2,\'similarity\',\'MaxDistance\',100);
2.MSAC算法
[tform,matchedPoints1,matchedPoints2] = ...
estimateGeometricTransform(matchedPoints1,matchedPoints2,\'similarity\',\'MaxDistance\',100);
~ matlab打开并行池,以下程序可以当做函数来做以后调用
function [] = startMatlabPool(size)
p = gcp(\'nocreate\'); %获取现在并行池情况
if isempty(p) %如果并行池是空的
poolsize = 0;
else
poolsize = p.NumWorkers %p.NumWorkers表示的是计算机核数(如果并行池已经完全打开的话)
end
if poolsize == 0
if nargin == 0 % nargin
针对当前正在执行的函数,返回函数调用中给定函数输入参数的数目。该语法仅可在函数体内使用。
parpool(\'local\');
else
try
parpool(\'local\',size); %使用parpool(\'local\',size)来创建
catch ce
parpool;
fail_p = gcp(\'nocreate\');
fail_size = fail_p.NumWorkers;
display(ce.message);
display(strcat(\'输入的size不正确,采用的默认配置size=\',num2str(fail_size)));
end
end
else
display(\'parpool start\');
if poolsize ~= size % 如果所给核心数与已经运行的核心数不同,则关闭并行池并重新打开并行池
closematlabpool();
startmatlabpool(size);
end
end
~ 关闭并行池
function [] = closeMatlabPool
poolobj = gcp(\'nocreate\');
delete(poolobj);
end
~ 更详细的解释可以看以下网页
http://blog.****.net/dang_wang/article/details/35553953
~ 找二值图像的连通区域
L = bwlabel(BW,n)
返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
[L,num] = bwlabel(BW,n)这里num返回的就是BW中连通区域的个数。
举例说明:
BW =
1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0
按4连通计算,方形的区域,和翻转的L形区域,有用是对角连接,不属于连通,所以分开标记,连通区域个数为3,就是有3个不同的连接区域。
L = bwlabel(BW,4)
结果如下:
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 3 3 0
1 1 1 0 0 0 0 0
而8连通标记,它们是连通的:
[L, num] = bwlabel(BW,8)
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 2 2 0
1 1 1 0 0 0 0 0
~ 返回满足某个条件的元素/像素个数
~ 将满足某个条件的区域像素去除(将以上两个进行合并应用)
[L num] = bwlabel(bw);
for i=1:num
if numel(find(L==i)) < 1200
bw(L==i) = 0;
end
end
~ 阈值面积消去
imageThresholdMorphology = bwareaopen(imageThreshold,15,4);%把白像素小于某个值的像素数去掉,其中15代表连通的像素个数,4代表联通度
~ 常用的一些对区域的处理算法
1、 matlab函数bwareaopen──删除小面积对象
格式:BW2 = bwareaopen(BW,P,conn)
作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。
算法:
(1)Determine the connected components.
L = bwlabeln(BW, conn);
(2)Compute the area of each component.
S = regionprops(L, \'Area\');
(3)Remove small objects.
bw2 = ismember(L, find([S.Area] >= P));
2、matlab函数bwarea──计算对象面积
格式:total = bwarea(BW)
作用:估计二值图像中对象的面积。
注:该面积和二值图像中对象的像素数目不一定相等。
3、matlab函数imclearborder──边界对象抑制
格式:IM2 = imclearborder(IM,conn)
作用:抑制和图像边界相连的亮对象。若IM是二值图,imclearborder将删除和图像边界相连的对象。默认情况conn=8。
注:For grayscale images, imclearborder tends to reduce the overall intensity level in addition to suppressing border structures.
算法:
(1)Mask image is the input image.
(2)Marker image is zero everywhere except along the border, where it equals the mask image.
4、matlab函数bwboundaries──获取对象轮廓
格式:B = bwboundaries(BW,conn)(基本格式)
作用:获取二值图中对象的轮廓,和OpenCV中cvFindContours函数功能类似。B是一个P×1的cell数组,P为对象个数,每个cell 是Q×2的矩阵,对应于对象轮廓像素的坐标。
5、matlab函数imregionalmin──获取极小值区域
格式:BW = imregionalmin(I,conn)
作用:寻找图像I的极小值区域(regional maxima),默认情况conn=8。
Regional
minima are connected components of pixels with a constant intensity
value, and whose external boundary pixels all have a higher value.
6、matlab函数bwulterode──距离变换的极大值
格式:BW2 = bwulterode(BW,method,conn)
作用:终极腐蚀。寻找二值图像BW的距离变换图的区域极大值(regional maxima)。用于距离变换的距离默认为euclidean,连通性为8邻域。
7、regionprops统计被标记的区域的面积分布,显示区域总数。
函数regionprops语法规则为:STATS = regionprops(L,properties)
该函数用来测量标注矩阵L中每一个标注区域的一系列属性。
L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。
返回值STATS是一个 长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。
Properties可以是由逗号分割的字符串列表、包含字符
串的单元数组、单个字符串\'all\'或者\'basic\'。如果properties等于字符串\'all\',则表4.1中的度量数据都将被计算;如果properties等于字符串\'basic\',则属性:\'Area\',\'Centroid\'和\'BoundingBox\'将被计算。表1就是所有有效的属性字符串。
表1 属性字符串列表----度量图像区域的属性或功能
\'Area\' 图像各个区域中像素总个数
\'BoundingBox\' 包含相应区域的最小矩形
\'Centroid\' 每个区域的质心(重心)
\'MajorAxisLength\' 与区域具有相同标准二阶中心矩的椭圆的长轴长度(像素意义下)
\'MinorAxisLength\' 与区域具有相同标准二阶中心矩的椭圆的短轴长度(像素意义下)
\'Eccentricity\' 与区域具有相同标准二阶中心矩的椭圆的离心率(可作为特征)
\'Orientation\' 与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度)
\'Image\' 与某区域具有相同大小的逻辑矩阵
\'FilledImage\' 与某区域具有相同大小的填充逻辑矩阵
\'FilledArea\' 填充区域图像中的on像素个数
\'ConvexHull\' 包含某区域的最小凸多边形
\'ConvexImage\' 画出上述区域最小凸多边形
\'ConvexArea\' 填充区域凸多边形图像中的on像素个数
\'EulerNumber\' 几何拓扑中的一个拓扑不变量——欧拉数
\'Extrema\' 八方向区域极值点
\'EquivDiameter\' 与区域具有相同面积的圆的直径
\'Solidity\' 同时在区域和其最小凸多边形中的像素比例
\'Extent\' 同时在区域和其最小边界矩形中的像素比例
\'PixelIdxList\' 存储区域像素的索引下标
\'PixelList\' 存储上述索引对应的像素坐标
~ 填充空洞
填充图像区域和“空洞”。
语法格式:
BW2 = imfill(BW)
这种格式将一张二值图像显示在屏幕上, 允许用户使用鼠标在图像上点几个点, 这几个点围成的区域即要填充的区域。要以这种交互方式操作,
BW必须是一个二维的图像。用户可以通过按Backspace键或者Delete键来取消之前选择的区域;通过shift+鼠标左键单击或者鼠标右键单击或双击可以确定选择区域。
[BW2,locations] = imfill(BW)
这种方式, 将返回用户的取样点索引值。注意这里索引值不是选取样点的坐标。
BW2 = imfill(BW,locations)
这种格式允许用户编程时指定选取样点的索引。locations是个多维数组时, 数组每一行指定一个区域。
BW2 = imfill(BW,\'holes\')
填充二值图像中的空洞区域。 如, 黑色的背景上有个白色的圆圈。 则这个圆圈内区域将被填充。
I2 = imfill(I)
这种调用格式将填充灰度图像中所有的空洞区域。
~ 常用的模板匹配算法(MAD,SAD,SSD,MSD,NCC,SSDA)
http://www.bubuko.com/infodetail-1049139.html
~ 卷积操作 conv2,具体解释见如下网页
http://blog.****.net/tina_ttl/article/details/51034809
~ matlab EMD工具箱的安装
https://blog.****.net/qrlhl/article/details/52213135
~ matlab常用工具箱汇总见
https://www.cnblogs.com/Hand-Head/articles/5168534.html