tanchinluh / IPCV

Scilab Image Processing and Computer Vision Module
GNU General Public License v3.0
1 stars 1 forks source link

imroifill #14

Open Yukiya-Kawakami opened 3 months ago

Yukiya-Kawakami commented 3 months ago

Hi,

I'd like to report that I find an issue in the imroifill.sci that worked on the previous version of Scilab but doesn't work on 2024.0 version. And I also present my proposed correction below. Please confirm the issue of imroifill.sci and correct it.

result = imin;
///
maskb = im2bw(mask,0.5);
perimeter=bwborder(maskb);
interior = im2bw(mask,0.5) & ~im2bw(perimeter,0.5);
idx = find(interior);
grid = zeros(mask);
grid(idx) = 1:length(idx);
[M,N] = size(grid);
perimValues = zeros(M,N);
perimIdx = find(perimeter); 
perimValues(perimIdx) = imin(perimIdx);
rightside = zeros(M,N);
rightside(2:(M-1),2:(N-1)) = perimValues(1:(M-2),2:(N-1)) + ...
perimValues(3:M,2:(N-1)) + perimValues(2:(M-1),1:(N-2)) + ...
perimValues(2:(M-1),3:N);
rightside = rightside(idx)';  // <- from rightside(idx)
i = grid(idx)'; // <- from grid(idx)
j = grid(idx)'; // <- from grid(idx)
s = 4*ones(idx)';            
idx = idx';
for k = [-1 M 1 -M]
    // Possible neighbors in the k-th direction
    Q = grid(idx+k);
    // Index of points with interior neighbors
    q = find(Q)';
    // Connect interior points to neighbors with -1's.
    //pause
    i = [i; grid(idx(q))]; // <- from grid(idx(q))'
    j = [j; Q(q)];
    s = [s; -ones(length(q),1)];
end

D = sparse([i,j],s);
x = D \ rightside;
result(idx) = x;

// best regards