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.