MATLAB中特定范围内的K-最近邻

MATLAB中特定范围内的K-最近邻,matlab,knn,nearest-neighbor,neighbours,Matlab,Knn,Nearest Neighbor,Neighbours,我正在用MATLAB处理k-近邻问题。有一个带有行r和列c的图像。并将其划分为r*c块-每个blcok表示以每个像素为中心的面片 我想找到特定搜索范围内每个blcok的k-最近邻。首先,我将knnsearch与kdTree一起使用: ns=createns(Block'、'nsmethod'、'kdtree'); [最近的索引,距离]=knnsearch(ns,块','k',k+1) 然而,我发现它会在所有街区中找到k-最近邻,而不是特定范围。因此,有没有其他方法来实现这一目标?谁能给我一些提示

我正在用MATLAB处理k-近邻问题。有一个带有行r和列c的图像。并将其划分为r*c块-每个blcok表示以每个像素为中心的面片

我想找到特定搜索范围内每个blcok的k-最近邻。首先,我将
knnsearch
kdTree
一起使用:

ns=createns(Block'、'nsmethod'、'kdtree');
[最近的索引,距离]=knnsearch(ns,块','k',k+1)

然而,我发现它会在所有街区中找到k-最近邻,而不是特定范围。因此,有没有其他方法来实现这一目标?谁能给我一些提示吗?提前谢谢


编辑:knnsearch的代码:

function [Index_nearest, Weight] = Compute_Weight(Input, Options) 

% Input the data and pre-processing
    windowsize = Options.winsize;
    k = Options.directionsize;
    deviation = Options.deviation; % Deviation for Gaussian kernel
    h = Options.h; % This parameter is for controling the weights
    [r,c] = size(Input); 

    In_pad  = padarray(Input, [windowsize windowsize], 'symmetric');

    window_size = (2*windowsize+1)*(2*windowsize+1);

    Block = zeros(window_size,r*c); 

%% Split the input data into blocks

    for i = 1:r
        for j = 1:c
            block = In_pad(i:i+2*windowsize,j:j+2*windowsize);
            Block(:,r*(i-1)+j) = block(:); % expand from column to column
       end
    end

%% Find k-nearest neighbour blocks

    % Create a KDtree with all local patches
    ns = createns(Block','nsmethod','kdtree');

    % Find the patches closest by in intensity in relation to the local patch itself
    [Index_nearest,ddd] = knnsearch(ns,Block','k',k+1);
    Index_nearest = Index_nearest';
    Index_nearest = Index_nearest(2:k+1,:);
end

你能给我一份样本文件吗?最简单的方法可能是在区域上循环,并在每个区域上执行
knnsearch
sector@Finn当然可以。我已经上传了代码供您参考。@Finn我还考虑了循环。有没有可能在没有环路的情况下找到本地Pach?我不这么认为。这是对每个区块的KNN搜索,所以你必须在它上面循环。听起来像是一项针对每个区块的工作。