Nazwa forum

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

Nie jesteś zalogowany na forum.

#1 2017-06-14 15:34:00

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

Funkcje

%% erozja

function out = erode(im)
    out = zeros(size(im));
    for i = 2:size(im,1)-1
        for j = 2:size(im,2)-1
            out(i,j) = min(min(im(i-1:i+1, j-1:j+1)));
        end
    end
end

%% erozja 5x5

function out = erode5x5(im)
    out = zeros(size(im));
    for i = 3:size(im,1)-2
        for j = 3:size(im,2)-2
            out(i,j) = min(min(im(i-2:i+2, j-2:j+2)));
        end
    end
end

%% dylatacja

function out = dilate(im)
    out = zeros(size(im));
    for i = 2:size(im,1)-1
        for j = 2:size(im,2)-1
            out(i,j) = max(max(im(i-1:i+1, j-1:j+1)));
        end
    end
end

%% rgb2gray

function out = rgb2gray(im)
    R = im(:,:,1) * 0.299;
    G = im(:,:,2) * 0.587;
    B = im(:,:,3) * 0.114;
    out = R+G+B;
end

%% czyszczenie ramki

function out = clearBorders(im)
    borderObjs = zeros(size(im));
    borderObjs(1,:) = im(1,:);
    borderObjs(end,:) = im(end,:);
    borderObjs(:,1) = im(:, 1);
    borderObjs(:,end) = im(:, end);
    start = borderObjs;
    koniec = 0;
   
    while ~koniec
        prev = borderObjs;
        borderObjs = dilate(borderObjs);
        borderObjs = borderObjs & im;
        if(borderObjs == prev)
            koniec = 1;
        end
    end
    out = im & (~(borderObjs | start));
end

%% redukcja szarości

function reduced = reduceGray(im, colorCnt)
    div = 256/colorCnt;
    reduced = zeros(size(im));
    for x = 1:size(im, 1)
        for y = 1:size(im, 2)
            reduced(x,y) = uint8(div*floor(im(x,y)/div));
        end
    end
end

%% redukcja RGB

function reduced = reduceRGB(im, colorsR, colorsG, colorsB)
    R = reduceGray(im(:,:,1), colorsR);
    G = reduceGray(im(:,:,2), colorsG);
    B = reduceGray(im(:,:,3), colorsB);
    reduced(:,:,1) = R/256;
    reduced(:,:,2) = G/256;
    reduced(:,:,3) = B/256;
end

%% liczenie poziomów kolorów

function colorCount = countColors(im)
    colorCount = zeros(1,256);
    [height,width] = size(im);
    for kk = 1:width
        for ww = 1:height
            colorCount(im(ww,kk)+1) = colorCount(im(ww,kk)+1)+1;
        end
    end
end

%% zamykanie

function out = closing(im)
    out = dilate(erode(im));
end

%% otwieranie

function out = opening(im)
    out = erode(dilate(im));
end


%% zamykanie właściwe

function out = proper_closing(im)
   out = max(im, opening(closing(opening(im))));
end

%% otwieranie właściwe

function out = proper_open(im)
   out = min(im, closing(opening(closing(im))));
end

%% środek ciężkości

function [cogX, cogY] = centerOfGravity(im)
    [wiersze, kolumny] = size(im);
    iksy = 0; igreki = 0;
        liczbaPunktow = 0;
    for k = 1:kolumny
        for w = 1:wiersze
            if im(w,k) ~= 0
                iksy = iksy+k;
                igreki = igreki+w;
                                liczbaPunktow = liczbaPunktow+1;
            end
        end
    end
    cogX = iksy/liczbaPunktow;
    cogY = igreki/liczbaPunktow;
end

%% liczenie procentowej powierzchni obiektu

function ratio = areaPrec(im)
    ratio = sum(sum(im))/(size(im, 1)*size(im,2));
end

Offline

#2 2017-06-16 09:49:24

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

Odp: Funkcje

Witam,

Lepszym rozwiazaniem bedzie uzycie nastepujacej funkcji do binaryzacji [dblpt]) dziala tak samo jak im2bw

cv.threshold(img,'Otsu') ewentualnie Triangle

Offline

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

Stopka

Forum oparte na FluxBB

Darmowe Forum