Showing posts with label Bahasa Delphi 7. Show all posts
Showing posts with label Bahasa Delphi 7. Show all posts

Tuesday, May 22, 2012

function Shrink pada pengolahan citra digital


function Shrink  (MInput:Matriks;Mengecil:integer):Matriks;
var
i,j:integer;
MOutput:matriks;
begin
setlength(MOutput,length(MInput) div mengecil,length(MInput[0]) div mengecil);
  for i:=0 to length(Moutput)-1 do
  begin
    for j:=0 to length(MOutput[0])-1 do
    begin
    MOutput[i,j]:=MInput[i*mengecil,j*mengecil];
    end;
  end;
  Shrink:=MOutput;
end;

function ImgMirror pada pengolahan citra digital


function ImgMirror(MInput:Matriks;keadaan:Char):Matriks;
var
  i,j:Integer;
  a,b,MOutput:Matriks;
begin
  a:=Flipping(MInput,'V');
  b:=Flipping(MInput,'H');
  case keadaan of
            'V': begin
                SetLength(MOutput,length(MInput)*2,length(MInput[0]));
                for i:=0 to (length(MOutput)-1) div 2 do
                 for j:=0 to (length(MOutput[0])-1) do
                 begin
                  MOutput[i,j]:=MInput[i,j];
                  MOutput[i+(Length(MOutput)-1) div 2,j]:=a[i,j];
                 end;
              end;
            'H': begin
                SetLength(MOutput,length(MInput),length(MInput[0])*2);
                for i:=0 to length(MOutput)-1 do
                 for j:=0 to (length(MOutput[0])-1) div 2 do
                 begin
                  MOutput[i,j]:=MInput[i,j];
                  MOutput[i,j+(Length(MOutput[0])-1) div 2]:=b[i,j];
                 end;

              end;
  end;
  ImgMirror:=MOutput;
end;

function ImageNegativeKetupat pada pengolahan citra digital


function ImageNegativeKetupat(MInput:Matriks):Matriks;
var
    i,j,l,s,r:integer ;
    MOutput : Matriks ;
begin
    SetLength(MOutput,Length(MInput), Length(MInput[0]));
    if Length(MInput)<Length(MInput[0]) then
      l:= Length(MInput)div 2
    else
      l:= Length(MInput[0])div 2 ;

    s:=(Length(MInput[0])div 2)-l;
    r:=(Length(MInput)div 2) - l;

    for i := 0 to Length(MOutput)-1 do
    begin
        for j:= 0 to Length(MOutput[0])-1 do
        begin
            MOutput[i,j] := MInput[i,j]   ;
            if ((i-r)+(j-s) >= l) and ((j-s)<=l+(i-r)) and ((i-r)<= l+(j-s) ) and ((i-r)+(j-s) <= length(MOutput)+l) and ((i-r)+(j-s) <= length(MOutput[0])+l) and (i>=r) and (j>=s) then
                 MOutput [i,j] := 255 - MInput[i,j]
        end;
    end;
    ImageNegativeKetupat := MOutput ;
end;

Function Polkadot pada pengolahan citra dgital


Function Polkadot(MInput:Matriks;l:integer):Matriks;
var
    i,j,m,n,r,c,d:integer ;
    MOutput : Matriks ;
begin
  d:=1;c:=1;
  SetLength(MOutput,Length(MInput),Length(MInput[0]));
  MOutput := chess(ImageNegativeL(MInput),l);
  m := round(Length(MInput)/l);
  n := round(Length(MInput[0])/l);

  if m>=n then r:=n div 2 else r:=m div 2;

  for i:=0 to Length(MOutput)-1 do
      begin
          for j:=0 to Length(MOutput[0])-1 do
              begin
                  if ((i div m) mod 2 >= 0) and ((j div n) mod 2 >= 0) then
                  if ((sqr((i-(r*(c-1)))-r)+sqr((j-(r*(d-1)))-r))<=r*r) and (i>=m*(c-1)) and (j>=n*(d-1)) then
                     MOutput[i,j]:= 255-MInput[i,j]
                  else
                     MOutput[i,j]:= MInput[i,j];
                  //if j=n-1 then d:=d+2;
              end;
        //if i=m-1 then c:=c+2;
      end;

  Polkadot:=MOutput;
end;

function Rekursif pada pengolahan citra digital


function Rekursif (MInput:Matriks;x:integer):Matriks;
var
i,j,k:Integer;
MOutput,temp:Matriks;
begin
temp:=MInput;
setlength(MOutput,length(MInput),length(MInput[0]));
begin
for k:=1 to x do
begin
MOutput:=Shrink(MInput,2);
begin
  for i:=0 to length(MOutput)-1 do
  begin
    for j:=0 to length(MOutput[0])-1 do
    begin
    temp[i+(length(MOutput)-1) div 2,j+(length(MOutput[0])-1) div 2]
    :=MOutput[i,j];
    end;
  end;
end;
end;
end;
Rekursif:=temp;
end;

Sunday, May 20, 2012

Function negative lingkaran belah ketupat pada pengolahan citra digital


fnction kuis2u(MInput:Matriks):Matriks;
var
  i,j,r: integer;
  MOutput : Matriks;
begin
    SetLength(MOutput,Length(MInput), Length(MInput[0]));
    r:=Length(Moutput) div 2;
    for i:= 0 to Length(MOutput)-1 do
      begin
        for j:= 0 to Length(MOutput[0])-1 do
          begin
            if (((i-r)*(i-r)+(j-r)*(j-r))<=r*r) and ((i+j <= r) or (j>=r+i) or (i>= r+j ) or (i+j >= length(MOutput)+r))then
                MOutput[i,j]:= 255-MInput[i,j]
                else
                MOutput[i,j]:=MInput[i,j]
          end;
      end;
  kuis2:=MOutput;
end;

function Image Negative Diagonal versi 2 pada pengolahan citra digital


function ImageNegativeDia2(MInput:Matriks):Matriks;
var
  i,j : integer;
  MOutput : Matriks;
begin
  SetLength(MOutput,Length(MInput),Length(MInput[0]));
  if Length(MInput)<Length(MInput[0]) then
  begin
  for i:=1 to Length(MOutput)-1 do
  begin
    for j:=1 to Length(MOutput[0])-1 do
    begin
      if round((j-Length(MInput[0]))/(i-0))<=round((0-Length(MInput[0]))/(Length(MInput)-0)) then
      MOutput[i,j]:=255-MInput[i,j]
      else
      MOutput[i,j]:=MInput[i,j];
    end;
  end;
  end
  else
  begin
  for i:=1 to Length(MOutput)-1 do
  begin
    for j:=1 to Length(MOutput[0])-1 do
    begin
      if (Length(MInput)*j)+(Length(MInput[0])*i)<=(Length(MInput)*Length(MInput[0])) then
      MOutput[i,j]:=255-MInput[i,j]
      else
      MOutput[i,j]:=MInput[i,j];
    end;
  end;
  end;
  ImageNegativeDia2:=MOutput;
end;

function Image Negative Lingkaran dinamis pada pengolahan citra digital


function ImageNegativeLingkaran(MInput:Matriks; Value:Integer):Matriks;
var
  i,j,a,b,r : integer;
  MOutput : Matriks;
begin
  SetLength(MOutput,Length(MInput),Length(MInput[0]));
  r:=Value;
    a:=(Length(Moutput) div 2);
    b:=(Length(Moutput[0]) div 2);
  for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
      if r<=(Length(MInput) div 2) then
      begin
      if r>=sqrt(sqr(a-i)+sqr(b-j)) then
      MOutput[i,j]:=255 - MInput[i,j]
      else
      MOutput[i,j]:=MInput[i,j];
    end
    else
    begin
      if Length(MInput) div 2 >=sqrt(sqr(a-i)+sqr(b-j)) then
      MOutput[i,j]:=255 - MInput[i,j]
      else
      MOutput[i,j]:=MInput[i,j];
    end;
  end;
  end;
  ImageNegativeLingkaran:=MOutput;
end;

Function negative papan catur pada pengolahan citra digital


function ImageNegative4(MInput:Matriks):Matriks;
var
  i,j : integer;
  MOutput : Matriks;
begin
  SetLength(MOutput,Length(MInput),Length(MInput[0]));
  for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
      if (j>(Length(MInput[0]) div 2)) and (i<=(Length(MInput) div 2)) then
      MOutput[i,j]:=255 - MInput[i,j]
      else
      if (j<=(Length(MInput[0]) div 2)) and (i>Length(MInput) div 2) then
      MOutput[i,j]:=255 - MInput[i,j]
      else
      MOutput[i,j]:=MInput[i,j];
    end;
  end;
  ImageNegative4:=MOutput;
end;

function negative diagonal pada pengolahan Citra digital


function ImageNegativeDia(MInput:Matriks):Matriks;
var
  i,j : integer;
  MOutput : Matriks;
begin
  SetLength(MOutput,Length(MInput),Length(MInput[0]));
  for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
      if (j<=(Length(MInput[0])-i)) then
      MOutput[i,j]:=255-MInput[i,j]
      else
      MOutput[i,j]:=MInput[i,j];
    end;
  end;
  ImageNegativeDia:=MOutput;
end;

Function Rotasi dalam Lingkaran pada pengolahan citra digital


function Rotation2(MInput:Matriks;pil:String):Matriks;
var
   i,j,r: integer;
   MOutput: Matriks;
begin
  if (pil='90C') or (pil='90UC') then
    begin
    if (Length(MInput)>Length(MInput[0])) then
      SetLength(MOutput, Length(MInput), Length(MInput[0]))
      else
      SetLength(MOutput, Length(MInput[0]), Length(MInput));
      r:=Length(Moutput) div 2;
      for i:= 0 to Length(MOutput)-1 do
        begin
          for j:=0 to Length(MOutput[0])-1 do
            begin
              if pil='90C' then
              begin
                  if (((i-r)*(i-r)+(j-r)*(j-r))<=r*r) then
                  MOutput[i,j]:=MInput[j,(Length(MOutput)-1)-i]
                  else
              MOutput[i,j]:=MInput[i,j]
              end
              else
              begin
              if ((i-r)*(i-r)+(j-r)*(j-r))<=r*r then
                  MOutput[i,j]:=MInput[(Length(MOutput[0])-1)-j,i]
                  else
              MOutput[i,j]:=MInput[i,j];
                  end;

            end;
        end;
    end
  else
      if (pil='180C') or (pil='180UC') then
        begin
             MOutput:=Rotation2(MInput,'90C');
             MOutput:=Rotation2(MOutput, '90C');
        end
          else
              if (pil='270C') then
                begin
                  MOutput:=Rotation2(MInput,'90UC');
                end
              else
                begin
                  MOutput:=Rotation2(MInput,'90C');
                end;
  Rotation2:=MOutput;
end;

function setengah addition, blending lingkaran pada pengolahan citra digital


function Kuis1(MInput:Matriks; MInput2:Matriks; Value:integer):Matriks;
var
  i,j,k,l,r,a,b : integer;
 MOutput : matriks;
begin
 SetLength(MOutput,Length(MInput),Length(MInput[0]));
    SetLength(MInput2,Length(MInput),Length(MInput[0]));
    r:=((Length(Moutput) div 2) div 2);
    a:=((Length(Moutput) div 2) div 2)+(Length(Moutput) div 2);
    b:=(Length(Moutput[0]) div 2);
    for i:= 0 to (Length(MOutput) div 2)-1 do
      begin
        for j:= 0 to (Length(MOutput[0]))-1 do
        begin
      MOutput[i,j]:=MInput[i,j] + MInput2[i,j];
      if (MOutput[i,j]>255) then MOutput[i,j]:=255
      else if (MOutput[i,j]<0) then MOutput[i,j]:=0;
    end;
  end;
  for k:= (Length(MOutput) div 2) to Length(MOutput)-1 do
      begin
        for l:= 0 to Length(MOutput[0])-1 do
        begin
          if r>=sqrt(sqr(a-k)+sqr(b-l)) then
          begin
             MOutput[k,l]:= (round(((100-Value)/100)*MInput[k,l])) + (round((Value/100)*MInput2[k,l]));
            if (MOutput[k,l]>255) then
            MOutput[k,l]:=255
            else
            if (MOutput[k,l]<0) then MOutput[k,l]:=0;
            end
            else
            MOutput[k,l]:=MInput[k,l];
        end;
        end;
        Kuis1:=MOutput;
  end;

Function Flip dalam lingkaran pada pengolahan citra digital


function Flip2(MInput:Matriks; pil:string):Matriks;
var
  i,j,r: integer;
 MOutput : matriks;
begin
 SetLength (MOutput,Length(MInput),Length(MInput[0]));
    r:=Length(Moutput) div 2;
if (pil='vertical') then
  begin
    for i:= 0 to Length(MOutput)-1 do
      begin
        for j:= 0 to Length(MOutput[0])-1 do
          begin
            if ((i-r)*(i-r)+(j-r)*(j-r))<=r*r then
                begin
                MOutput[i,j]:= MInput[(Length(MOutput)-1)-i,j];
                end
            else
              MOutput[i,j]:= MInput[i,j];
          end;
      end;
      end
      else
      if (pil='horisontal') then
    begin
    for i:= 0 to Length(MOutput)-1 do
      begin
        for j:= 0 to Length(MOutput[0])-1 do
          begin
            if ((i-r)*(i-r)+(j-r)*(j-r))<=r*r then
                begin
                MOutput[i,j]:=MInput[i, (Length(MOutput[0])-1)-j];
                end
            else
              MOutput[i,j]:= MInput[i,j];
          end;
      end;
      end;
 Flip2:=MOutput;
end;

function slicing dalam lingkaran pada pengolahan citra digital


function Slicing2(MInput:Matriks; Value:integer):Matriks;
var
  i,j,r,k,tempdiv, LevelBit : integer;
 MOutput : matriks;
begin
 SetLength (MOutput,Length(MInput),Length(MInput[0]));
    r:=Length(Moutput) div 2;
    for i:= 0 to Length(MOutput)-1 do
      begin
        for j:= 0 to Length(MOutput[0])-1 do
          begin
            if ((i-r)*(i-r)+(j-r)*(j-r))<=r*r then
                begin
                LevelBit:=0;
                tempdiv:=MInput[i,j];
              for k:= 0 to Value do
              begin
                  LevelBit:=tempdiv mod 2;
                  tempdiv:=tempdiv div 2;
              end;
            if LevelBit=1 then
              LevelBit:=255;
            MOutput[i,j]:=LevelBit;
                end
            else
              MOutput[i,j]:= MInput[i,j];
          end;
      end;
 Slicing2:=MOutput;
end;

Function Rotation pada pengolahan citra digital


Function Rotation(MInput:Matriks;pil:String):Matriks;
var
   i,j: integer;
   MOutput: Matriks;
begin
  if (pil='90C') or (pil='90UC') then
    begin
      SetLength(MOutput, Length(MInput[0]), Length(MInput));
      for i:= 0 to Length(MOutput)-1 do
        begin
          for j:=0 to Length(MOutput[0])-1 do
            begin
              if pil='90C' then
                  MOutput[i,j]:=MInput[j,(Length(MOutput)-1)-i]
              else
                  MOutput[i,j]:=MInput[(Length(MOutput[0])-1)-j,i];
            end;
        end;
    end
  else
      if (pil='180C') or (pil='180UC') then
        begin
             MOutput:=Rotation(MInput,'90C');
             MOutput:=Rotation(MOutput, '90C');
        end
          else
              if (pil='270C') then
                begin
                  MOutput:=Rotation(MInput,'90UC');
                end
              else
                begin
                  MOutput:=Rotation(MInput,'90C');
                end;
  Rotation:=MOutput;
end;

Function Flip pada pengolahan citra digital


Function Flip(MInput:Matriks; pil:string):matriks ;
var
i,j:integer;
MOutput:Matriks;
begin
SetLength(MOutput,Length(MInput),Length(MInput[0]));
if (pil='vertical') then
  begin
  for i:=0 to Length(MOutput)-1 do
      begin
        for j:=0 to Length(MOutput[0])-1 do
          begin
          MOutput[i,j]:= MInput[(Length(MOutput)-1)-i,j];
          end;
      end;
      Flip:=MOutput;
    end
    else
    if (pil='horisontal') then
    begin
  for i:=0 to Length(MOutput)-1 do
      begin
        for j:=0 to Length(MOutput[0])-1 do
          begin
          MOutput[i,j]:=MInput[i, (Length(MOutput[0])-1)-j];
          end;
      end;
      Flip:=MOutput;
    end;
end;

Function Slicing pada pengolahan citra digital


Function Slicing(MInput:Matriks; Value:integer):Matriks;
var
  i,j,k, tempdiv, LevelBit : integer;
  MOutput :Matriks;
begin
    SetLength (MOutput,Length(MInput),Length(MInput[0]));
    LevelBit:=0;
    for i:=0 to Length(MOutput)-1 do
      begin
        for j:=0 to Length(MOutput[0])-1 do
          begin
            tempdiv:=MInput[i,j];
            for k:= 0 to Value do
              begin
                  LevelBit:=tempdiv mod 2;
                  tempdiv:=tempdiv div 2;
              end;
            if LevelBit=1 then
              LevelBit:=255;
            MOutput[i,j]:=LevelBit;
          end;
      end;
    Slicing:=MOutput;
end;

Tuesday, May 15, 2012

Function Addition versi 2 pada pengolahan citra digital


Function Addtion2(MInput,MInput2:Matriks ; X,Y:integer):Matriks;
var
i,j,k,l : integer;
MOutput : Matriks;
begin
SetLength(MOutput,Length(MInput),Length(MInput[0]));
  for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
      MOutput[i,j]:= MInput[i,j];
    end;
    end;
    if ((Length(MOutput)-X)>=Length(MInput2)) and ((Length(MOutput[0])-Y)>=Length(MInput2[0])) then
    begin
  for k:=0 to Length(MInput2)-1 do
  begin
    for l:=0 to Length(MInput2[0])-1 do
    begin
      MOutput[X+k,Y+l]:=MInput[X+k,Y+l] + MInput2[k,l];
      if (MOutput[X+k,Y+l]>255) then MOutput[X+k,Y+l]:=255
      else if (MOutput[X+k,Y+l]<0) then MOutput[X+k,Y+l]:=0;
    end;
  end;
  end
  else if ((Length(MOutput)-X)<Length(MInput2)) and ((Length(MOutput[0])-Y)>=Length(MInput2[0])) then
    begin
  for k:=0 to (Length(MOutput)-X)-1 do
  begin
    for l:=0 to Length(MInput2[0])-1 do
    begin
      MOutput[X+k,Y+l]:=MInput[X+k,Y+l] + MInput2[k,l];
      if (MOutput[X+k,Y+l]>255) then MOutput[X+k,Y+l]:=255
      else if (MOutput[X+k,Y+l]<0) then MOutput[X+k,Y+l]:=0;
    end;
  end;
  end
  else if ((Length(MOutput)-X)>=Length(MInput2)) and ((Length(MOutput[0])-Y)<Length(MInput2[0])) then
    begin
  for k:=0 to Length(MInput2)-1 do
  begin
    for l:=0 to ((Length(MOutput[0]))-Y)-1 do
    begin
      MOutput[X+k,Y+l]:=MInput[X+k,Y+l] + MInput2[k,l];
      if (MOutput[X+k,Y+l]>255) then MOutput[X+k,Y+l]:=255
      else if (MOutput[X+k,Y+l]<0) then MOutput[X+k,Y+l]:=0;
    end;
  end;
  end
  else if ((Length(MOutput)-X)<Length(MInput2)) and ((Length(MOutput[0])-Y)<Length(MInput2[0])) then
    begin
  for k:=0 to ((Length(MOutput))-X)-1 do
  begin
    for l:=0 to ((Length(MOutput[0]))-Y)-1 do
    begin
      MOutput[X+k,Y+l]:=MInput[X+k,Y+l] + MInput2[k,l];
      if (MOutput[X+k,Y+l]>255) then MOutput[X+k,Y+l]:=255
      else if (MOutput[X+k,Y+l]<0) then MOutput[X+k,Y+l]:=0;
    end;
  end;
  end;
  Addtion2:=MOutput;
end;

Function Blending pada pengolahan citra digital


Function Blending(MInput,MInput2:Matriks; Value:integer):Matriks;
var
i,j,k,l : integer;
MOutput : Matriks;
begin
if (Length(MInput)>Length(MInput2)) then
begin
SetLength(MOutput,Length(MInput),Length(MInput[0]));
  for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
      MOutput[i,j]:= MInput[i,j];
    end;
    end;
      for k:=0 to Length(MInput2)-1 do
  begin
    for l:=0 to Length(MInput2)-1 do
    begin
      MOutput[k,l]:= (round(((100-Value)/100)*MInput[k,l])) + (round((Value/100)*MInput2[k,l]));
      if (MOutput[k,l]>255) then MOutput[k,l]:=255
      else if (MOutput[k,l]<0) then MOutput[k,l]:=0;
    end;
  end;
  end
  else if (Length(MInput)<Length(MInput2)) then
begin
SetLength(MOutput,Length(MInput2),Length(MInput2[0]));
   for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
    MOutput[i,j]:= MInput2[i,j];
    end;
    end;
      for k:=0 to Length(MInput)-1 do
  begin
    for l:=0 to Length(MInput)-1 do
    begin
      MOutput[k,l]:= (round(((100-Value)/100)*MInput2[k,l])) + (round((Value/100)*MInput[k,l]));
      if (MOutput[k,l]>255) then MOutput[k,l]:=255
      else if (MOutput[k,l]<0) then MOutput[k,l]:=0;
    end;
  end;
  end;
  Blending:=MOutput;
end;

Function Addtion pada pengolahan citra digital


Function Addtion(MInput,MInput2:Matriks):Matriks;
var
i,j,k,l : integer;
MOutput : Matriks;
begin
if (Length(MInput)>Length(MInput2)) then
begin
SetLength(MOutput,Length(MInput),Length(MInput[0]));
  for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
      MOutput[i,j]:= MInput[i,j];
    end;
    end;
      for k:=0 to Length(MInput2)-1 do
  begin
    for l:=0 to Length(MInput2)-1 do
    begin
      MOutput[k,l]:=MInput[k,l] + MInput2[k,l];
      if (MOutput[k,l]>255) then MOutput[k,l]:=255
      else if (MOutput[k,l]<0) then MOutput[k,l]:=0;
    end;
  end;
  end
  else if (Length(MInput)<Length(MInput2)) then
begin
SetLength(MOutput,Length(MInput2),Length(MInput2[0]));
   for i:=0 to Length(MOutput)-1 do
  begin
    for j:=0 to Length(MOutput[0])-1 do
    begin
    MOutput[i,j]:= MInput2[i,j];
    end;
    end;
      for k:=0 to Length(MInput)-1 do
  begin
    for l:=0 to Length(MInput)-1 do
    begin
      MOutput[k,l]:=MInput2[k,l] + MInput[k,l];
      if (MOutput[k,l]>255) then MOutput[k,l]:=255
      else if (MOutput[k,l]<0) then MOutput[k,l]:=0;
    end;
  end;
  end;
  Addtion:=MOutput;
end;