根据相邻点在随机数据中查找中心

问题描述 投票:0回答:1

假设我正在提供包含黑白像素的2D数组。我想找到基于相邻像素的“中心”或数据点。这意味着最密集的部件具有最高的冲击力,而小的松散/散射/薄的部件仅具有小的冲击力。

这是我的用例的示例图像:

Sample1

在此场景中找到中心的最佳算法是什么?

algorithm points
1个回答
1
投票

以下函数计算给定图像的加权中心。图像表示为布尔数组。黑色表示为“真实”,白色表示为“假”。

double[] weightedCenter(boolean[][] img){
    int W = img.length;
    int H = img[0].length;
    double centerX = 0;
    double centerY = 0;
    for(int i=0;i<W;i++){
        for(int j=0;j<H;j++){
            if(!img[i][j])
                continue;
            centerX += nbs(img, i, j) * i;
            centerY += nbs(img, i, j) * j;
        }
    }
    centerX /= (W * H);
    centerY /= (W * H);
    return new double[]{centerX, centerY};
}

基于直接黑邻居的数量计算(根据请求)每个黑色像素的权重。

double nbs(boolean[][] img, int x, int y){
    int W = img.length;
    int H = img[0].length;
    int[] offset = {-1, 0, 1};
    double nb0 = 0;
    double nb1 = 0;
    for(int xOff : offset){
        for(int yOff : offset){
            int x2 = x + xOff;
            int y2 = y + yOff;
            if(x2 < 0 || x2 >= W || y2 < 0 || y2 >= H)
                continue;
            nb0++;
            if(img[x2][y2])
                nb1++;
        }
    }
    return nb1 / nb0;
}
© www.soinside.com 2019 - 2024. All rights reserved.