filtrowanie krawędzi bitmapy

0

Witam!
Robie program którego celem jest dokonanie operacji: dylatacji, erozji, i poźniej otwarcia, domknięcia oraz dwóch operacji łącznie na bitmapie. Zrobiłem sobie dwie funkcje do erozji i dylatacji które pełnią role filtra, wszytko działa dobrze poza jednym ale. Mianowicie podczas filtrowania, funkcje nie filtruja lewej krawędzi obrazu oraz górnej krawędzi obrazu, pozostają puste linie pikseli zarówno dla operacji erozji jak i dylatacji nie mam pojęcia jak to rozwiążać może ktos by pomógł z tym probleme. Poniże zamieszczam kod funkcji która dokonuje dylatacji.

function dylatacja(obraz:TBitmap;rozmiarfiltru:byte):TBitmap;
VAR
min:Longint;
wys,szer,lewy,prawy:integer;
licznik1,licznik2,licznikA,licznikB:integer;
BEGIN
dylatacja:=TBitmap.Create;
dylatacja.Height:=bmp.Height;
dylatacja.Width:=bmp.Width;
wys:=bmp.Height;
szer:=bmp.Width;
if rozmiarfiltru=3 then
  begin
  lewy:=-1;
  prawy:=1;
  end;
if rozmiarfiltru=5 then
  BEGIN
  lewy:=-2;
  prawy:=2;
  END;
if rozmiarfiltru=7 then
  BEGIN
  lewy:=-3;
  prawy:=3;
  END;
if rozmiarfiltru=9 then
  BEGIN
  lewy:=-4;
  prawy:=4;
  END;

  for licznik1:=0 TO szer DO
    BEGIN
      for licznik2:=0 TO wys DO
      BEGIN
        min:=obraz.Canvas.Pixels[(licznik1+licznikA),(licznik2+licznikB)];
          for licznikA:=lewy TO prawy DO
            BEGIN
              for licznikB:=lewy TO prawy DO
                if (min > obraz.Canvas.Pixels[(licznik1+licznikA),(licznik2+licznikB)]) THEN
                  min:= obraz.Canvas.Pixels[(licznik1+licznikA),(licznik2+licznikB)];
            END;
        dylatacja.Canvas.Pixels[(licznik1+licznikA),(licznik2+licznikB)]:=min;

      END;
    END;
END;

Pozdrawiam Jakub.

0

Witam

Nie wiem czy jeszcze ktoś obserwuje ten temat, ale w takich wypadkach jak kolega opisuje nalezy przed jakakolwiek z wymienionych operacji powiekszyc odraz o jeden pixel z kazdej strony, a po dokonaniu przekształcen z powrotem go pomniejszyc...

Pozdrawiam

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