Niestety, nikt nie powie Ci czym jest FluxBB - musisz go poznać sam!
Nie jesteś zalogowany na forum.
%% 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
Witam,
Lepszym rozwiazaniem bedzie uzycie nastepujacej funkcji do binaryzacji dziala tak samo jak im2bw
cv.threshold(img,'Otsu') ewentualnie Triangle
Offline