我在Calculating the Local Ternary Pattern of an image?上找到了本地三元模式(LTP)的详细信息和实现。我想问一些更详细的信息,选择阈值t
的最佳方法是什么,我也很难理解reorder_vector = [8 7 4 1 2 3 6 9];
的作用
答案 0 :(得分:1)
不幸的是,找出使用LTP的阈值是不好的方法。它主要是试验和错误或通过实验。但是,我可以建议使阈值自适应。您可以使用Otsu's algorithm动态确定图片的最佳阈值。这假设您在图像中的强度分布是双峰的。换句话说,物体和背景之间存在明显的分离。 MATLAB通过graythresh
函数实现了这一功能。但是,这会生成介于0和1之间的阈值,因此您需要将结果乘以255,假设图像类型为uint8
。
因此,请执行:
t = 255*graythresh(im);
im
是您希望计算LTP的图像。现在,我当然可以提供有关reorder_vector
正在做什么的见解。请看下图中有关如何计算LTP的信息:
当我们生成三元代码矩阵(中间的矩阵)时,我们需要生成一个不包含邻域中间的8元素序列。我们从最东边的元素(第2行,第3列)开始,然后以逆时针顺序遍历元素。 reorder_vector
变量允许您选择那些遵循该顺序的特定元素。如果你还记得,MATLAB可以使用列主线性索引来访问矩阵。具体来说,给定一个3 x 3矩阵,我们可以使用1到9之间的数字访问一个元素,并且内存的布局如下:
1 4 7
2 5 8
3 6 9
因此,reorder_vector
的第一个元素是索引8,它是最东边的元素。接下来是索引7,它是右上角的元素,然后是索引4,它是朝北的元素,然后是1,2,3,6,最后是9。
如果您按照这些数字,您将确定我如何获得reorder_vector
:
reorder_vector = [8 7 4 1 2 3 6 9];
通过使用此变量访问每个3 x 3局部邻域,我们将生成正确的8元素序列,该序列遵循三元代码的顺序,以便我们可以继续进行算法的下一阶段。