Pole powierzchni obrazu 2d

0

Witam, mam za zadanie obliczenie pola powierzchni obrazu oraz jego obwód jednak zupełnie nie wiem jak sie za to zabrać. Byłabym wdzięczna za pomoc z kodem lub o jakieś wskazówki. Załączam przykładowy obraz.
Z góry dziękuje!
Przechwytywanie.PNG

0

Całki, tutaj trzeba całek.

0

Myślę, że w Twoim przypadku sprawę załatwi:

i policzenie ile pikseli się zamalowało.

3

Przy floodfill, można dodatkowo zliczać piksele stykające się z tłem. Są trzy rodzaje takich pikseli:

  1. Biały piksel, którego trzech sąsiadów (sąsiedztwo von Neumanna) jest białych i jeden jest czarny - liczyć jako jedna jednostka.
  2. Biały piksel, którego dwóch sąsiadów jest białych i dwóch jest czarnych - liczyć jako dwie jednostki.
  3. Biały piksel, którego jeden sąsiad jest biały i trzech jest czarnych - liczyć jako trzy jednostki.
  4. Pikseli innych niż wymienione wyżej nie zlicza się.

Suma jednostek to będzie obwód.

Zamiast algorytmu flood fill, najprostszym jest pętla iterująca po wierszach zawierajaca w sobie pętlę iterującą po kolumnach, czyli dwie pętle iterujące po wszystkich pikselach. Do obwodu liczyć tak, jak napisałem wyżej, a do pola zliczać wszystkie białe piksele.

2

W Octave mi tak wyszło...

pole = 156273
obwod = 2948

figura = imread("Przechwytywanie.PNG")(:, :, 1); % czerwony kanal
pole = 0;
obwod = 0;

for r = 1:size(figura, 1) % for number of rows of the image
  for c = 1:size(figura, 2) % for number of columns of the image
    if figura(r, c) == 255
      pole = pole + 1;

      czarni_sasiedzi = 0;

      if figura(r - 1, c) == 0
        czarni_sasiedzi = czarni_sasiedzi + 1;
      end
      if figura(r + 1, c) == 0
        czarni_sasiedzi = czarni_sasiedzi + 1;
      end
      if figura(r, c + 1) == 0
        czarni_sasiedzi = czarni_sasiedzi + 1;
      end
      if figura(r, c - 1) == 0
        czarni_sasiedzi = czarni_sasiedzi + 1;
      end

      obwod = obwod + czarni_sasiedzi;
    end
  end
end

pole
obwod

Wiem... w matlabie jestem noobem.

ps. trzeba zwrócić uwagę, że obrazek dodany przez OP ma szary pasek na dole. Więc jakby ktoś chciał badać figurę inaczej, np. czy kolor_piksela > 0, to mu nie wyjdzie, chyba że dokona edycji obrazu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1