K-ближайшая окрестность в специальном диапазоне в MATLAB - PullRequest
0 голосов
/ 25 октября 2019

Я занимаюсь проблемой k-соседей в MATLAB. Есть изображение со строкой r и столбцом c . И разделите его на r * c блоков - каждый blcok представляет патч с центром в каждом пикселе.

И я хочу найти k-ближайший соседний товар каждого blcok в пределах определенного диапазона поиска . Сначала я использую knnsearch с kdTree:

ns = createns(Block','nsmethod','kdtree'); [Index_nearest,dist] = knnsearch(ns,Block','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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...