Niestety, nikt nie powie Ci czym jest FluxBB - musisz go poznać sam!
Nie jesteś zalogowany na forum.
Strony: 1
%% 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
Strony: 1