我正在尝试从numpy 2D矩阵中提取局部最大值的坐标。这些值是介于0和1之间的数字,表示物体在该位置的可能性。
我尝试对矩阵进行阈值处理,提取argmax,保存坐标并将其值更改为0,然后循环直到遇到阈值。
private static final Gson GSON = (new GsonBuilder()).registerTypeAdapter(Boolean.class, new JsonBooleanDeAndSerializer()).create();
对此我不满意,我认为有更有效的优雅方法可以提取局部最大值。想法?
答案 0 :(得分:1)
定位局部最大值是scikit-image的一项内置功能,它可以在预定的距离内找到最大值。
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ('cate_id', 'cate_name')
class SubCategorySerializer(serializers.ModelSerializer):
class Meta:
model = SubCategory
fields = ('sub_cate_id', 'sub_cate_name', 'sub_fk')
def to_representation(self, instance):
response = super().to_represntation(instance)
response['sub_fk'] = CategorySerializer(instance.sub_fk).data
return response
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Products
fields = ('pro_id', 'pro_name', 'description', 'price', 'quantity', 'pro_cate_fk', 'pro_sub_fk', 'image')
def to_representation(self, instance):
response = super().to_representation(instance)
response['pro_cate_fk'] = CategorySerializer(instance.pro_cate_fk).data
response['pro_sub_fk'] = ProductSerializer(instance.pro_sub_fk).data
return response
我不确定这是如何实现的,但是一种实现方法是执行非最大抑制(即迭代矩阵中的每个值并与半径内的所有值进行比较。如果该值在该窗口中不是最大的然后将其设置为零)。然后将所有非零值(可能高于某个置信度阈值)的坐标作为局部最大值的集合。
答案 1 :(得分:0)
如果您要提取Numby矩阵的坐标,则应满足所有阈值的所有值,只需将阈值与整个矩阵进行比较即可。
import numpy as np
data = np.array([
[0, 0.5, 0.95],
[0, 0.95, 0.5],
[0.95, 0.5, 0]
])
thresholded_coordinates = np.argwhere(data > 0.9)
# array([[0, 2], [1,1], [2, 0]])
thresholded_coordinates的输出是成对的坐标集合。 (0,2)表示它是第一行中的第三个值(0索引)。输出显示在最后一行的注释上。