>> fx = find( pr, 1, 'first'); %// first x coordinate
>> tx = find( pr, 1, 'last'); %// last x coordinat
>> fy = find( pc, 1, 'first'); %// first y coordinate
>> ty = find( pc, 1, 'last'); %// last y coordinate
一旦你有角的x,y坐标,你可以在旋转的图像上绘制它们:
>> imshow(rbw,[],'border','tight');
>> hold on;
>> plot( [fx tx tx fx fx], [fy fy ty ty fy], ':r', 'LineWidth',3);
1 回答
将此视为Matlab图像处理的初学者教程 . 阅读所用命令的文档,然后尝试和 understand 他们正在做什么以及为什么 .
1.阅读图片
使用imread将图像读入3D矩阵 . 为方便起见,我们使用im2double将其转换为[0..1]范围内的
double
:您可以使用size命令查看
img
的大小:您可以从结果中看到您的图像有1024行,768列和3个通道(红色,绿色和蓝色) .
2.转换为黑白(a.k.a thresholding)
如您所见,电池明显比背景亮,无色 . 我们可以选择在最亮通道值与最暗通道值之间存在较大间隙的像素作为“电池”像素:
有关详细信息,请参阅max和min .
还有其他方法可以对图像进行阈值处理,有关详细信息,请参阅graythresh .
使用imshow我们可以看到我们得到了什么:
通常使用morphological operations来改善阈值结果 .
你可以使用imclose:
结果:
3.找到旋转角度
用于处理和处理bw图像的非常有用的命令是regionprops . 它可以让你获得各种不错的属性 . 您将使用它来计算图像的"white" /电池区域的'Orientation'
如您所见,电池旋转了52.8度 .
使用imrotate来"straighten"电池
一旦电池轴对齐,您可以使用any将白色像素"project"水平轴和垂直轴上:
现在,您需要在投影中找到设置为1的第一个和最后一个像素 . 使用find:
一旦你有角的x,y坐标,你可以在旋转的图像上绘制它们:
产量:
坐标是:
如您所见,您的电池长度为(866-406)像素,宽度为(733-608)像素 .