Nazwa forum

Niestety, nikt nie powie Ci czym jest FluxBB - musisz go poznać sam!

Nie jesteś zalogowany na forum.

#1 2017-06-14 15:39:13

adlex
Administrator
Dołączył: 2017-06-14
Liczba postów: 6
WindowsChrome 58.0.3029.110

Dodatkowe pomoce ( funkcje )

%% Obcinanie ramki jednym pixelem

function out = edge(im)
    out = xor(im, erode(im));
end

%% wypełnianie otworów

function out = fillHoles(im)
    holes = clearBorders(~im);
    out = holes | im;
end

%% detekcja obiektów

function [detect_img, detect_items_count] = detect_items(IMG, DETECT)
    % USE:
    % IMG = ~imread('morf.bmp');
    % [detect_img, detect_items_count] = lab3_detect(IMG, 1);
    % imshow(detect_img + 1, [[1, 1, 1]; colormap('lines')]);

    S = size(IMG);
    detect_img = zeros(S);
    merge_table = [];
   
    for i = 1:S(1)
        for j = 1:S(2)
            if IMG(i, j) == DETECT
                item = 0;
               
                % STEP 1 - look around
                if 0 < i - 1
                    item_top = detect_img(i - 1, j);
                    if item_top ~= 0
                        % Item from above
                        item = item_top;
                    end
                end

                if 0 < j - 1
                    item_left = detect_img(i, j - 1);
                    if item_left ~= 0
                        % Item from left
                        item = item_left;
                    end
                end

                if (0 < i - 1) && (0 < j - 1)
                    item_top = detect_img(i - 1, j);
                    item_left = detect_img(i, j - 1);
                    if (item_top ~= 0) && (item_left ~= 0) && (item_top ~= item_left) && (merge_table(item_top) ~= merge_table(item_left))
                        % Item from above and left is same item! Merge them!
                        item = item_left;
                       
                        lower = min(merge_table(item_left), merge_table(item_top));
                        merge_table(merge_table==merge_table(item_left)) = lower;
                        merge_table(merge_table==merge_table(item_top)) = lower;
                    end
                end

                % STEP 2 - use what you found
                if item ~= 0
                    % We have existing item, use it
                    detect_img(i, j) = item;
                else
                    % No item known, add new
                    s = size(merge_table, 2) + 1;
                    merge_table(s) = s;
                    detect_img(i, j) = s;
                end
            end
        end
    end
   
    % Repait with merge_table
    for i = 1:size(merge_table, 2)
        detect_img(detect_img==i) = merge_table(i);
    end
   
    % Repaint with low numbers!
    merge_table = unique(detect_img);
    for i = 1:size(merge_table, 1)
        detect_img(detect_img==merge_table(i)) = i - 1;
    end
   
    detect_items_count = size(merge_table, 1) - 1;
end

Offline

Użytkowników czytających ten temat: 0, gości: 1
[Bot] ClaudeBot

Stopka

Forum oparte na FluxBB

Darmowe Forum