请问大家有没有图象处理方面的程序示例,谢谢了。
比如给出一幅图象  求灰度图
                  图象除噪声
                  滤波等
非常,非常,非常,万分感谢帮助。谢谢

解决方案 »

  1.   

    1\灰度
    procedure ConvertToGrayGraphic(var Bmp: TBitmap);
    var
      p :PByteArray;
      Gray,x,y :Integer;
    begin
      for y:=0 to Bmp.Height-1 do
      begin
        p:=Bmp.scanline[y];
        for x:=0 to Bmp.Width-1 do
        begin
          Gray:=Round(p[x*3+2]*0.3+p[x*3+1]*0.59+p[x*3]*0.11);
          p[x*3]:=Gray;
          p[x*3+1]:=Gray;
          p[x*3+2]:=Gray;
        end;
      end;
    end;
      

  2.   

    2\滤波
    //中值滤波:
    procedure TFrmSmoothing.N4Click(Sender: TObject);
    var
       i,j , s, nTotal, nResult: integer;
       ii, jj ,nTemp : integer;
       m : array [1..30] of integer;
       k : array [1..30] of integer;
    begin
       for i := 2 to Image1.Picture.Width-1 do
          for j :=2 to Image1.Picture.Height-1 do
          begin
             m[1] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i-1,j-1]));
             m[2] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i,j-1]));
             m[3] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i+1,j-1]));
             m[4] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i-1,j]));
             m[5] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i,j]));
             m[6] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i+1,j]));
             m[7] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i-1,j+1]));
             m[8] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i,j+1]));
             m[9] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i+1,j+1]));
             for ii:=1 to 8 do   //冒泡排序
                 for jj :=ii to 8 do
                 begin
                    if m[jj] > m[jj+1] then
                    begin
                       nTemp :=m[jj];
                       m[jj] := m[jj+1];
                       m[jj+1] :=nTemp;
                    end;
                 end;
             nResult := m[5];
             Canvas.Pixels[i+320,j] := RGB(nResult,nResult,nResult);
          end;end;
    //使用模板滤波
    procedure TFrmSmoothing.N2Click(Sender: TObject);
    var
       i,j , s, nTotal, nResult: integer;
       m : array [1..30] of integer;
       k : array [1..30] of integer;
    begin
       k[1] := StrToInt(Edit1.text);
       k[2] := StrToInt(Edit2.text);
       k[3] := StrToInt(Edit3.text);
       k[4] := StrToInt(Edit4.text);
       k[5] := StrToInt(Edit5.text);
       k[6] := StrToInt(Edit6.text);
       k[7] := StrToInt(Edit7.text);
       k[8] := StrToInt(Edit8.text);
       k[9] := StrToInt(Edit9.text);
       nTotal := 0;
       for i:=1 to 9 do
          nTotal := nTotal + k[i];   for i := 1 to min(328 ,Image1.Picture.Width) do
          for j :=1 to min(328 ,Image1.Picture.Height) do
          begin
             m[1] := GetRValue(ColorToRGB(Canvas.Pixels[i-1,j-1]));
             m[2] := GetRValue(ColorToRGB(Canvas.Pixels[i,j-1]));
             m[3] := GetRValue(ColorToRGB(Canvas.Pixels[i+1,j-1]));
             m[4] := GetRValue(ColorToRGB(Canvas.Pixels[i-1,j]));
             m[5] := GetRValue(ColorToRGB(Canvas.Pixels[i,j]));
             m[6] := GetRValue(ColorToRGB(Canvas.Pixels[i+1,j]));
             m[7] := GetRValue(ColorToRGB(Canvas.Pixels[i-1,j+1]));
             m[8] := GetRValue(ColorToRGB(Canvas.Pixels[i,j+1]));
             m[9] := GetRValue(ColorToRGB(Canvas.Pixels[i+1,j+1]));
             nResult := m[1]*k[1]+ m[2]*k[2]+ m[3]*k[3]+ m[4]*k[4]+ m[5]*k[5]+
                m[6]*k[6]+ m[7]*k[7]+ m[8]*k[8]+ m[9]*k[9];
             if nTotal<>0 then nResult := nResult div nTotal;
             Canvas.Pixels[i+320,j] := RGB(nResult,nResult,nResult);
          end;end;
      

  3.   

    楼上兄弟是高手,你听他的没错呢!呵呵,
    转贴:
    暗淡或者灰度一个图片:
    function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
    var
      r, g, b: integer;begin
      if Value > 100 then Value := 100;
      clr := ColorToRGB(clr);
      r := Clr and $000000FF;
      g := (Clr and $0000FF00) shr 8;
      b := (Clr and $00FF0000) shr 16;  r := r + Round((255 - r) * (value / 100));
      g := g + Round((255 - g) * (value / 100));
      b := b + Round((255 - b) * (value / 100));  Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b));
    end;procedure DimBitmap(ABitmap: TBitmap; Value: integer);
    var
      x, y: integer;
      LastColor1, LastColor2, Color: TColor;
    begin
      if Value > 100 then Value := 100;
      LastColor1 := -1;
      LastColor2 := -1;  for y := 0 to ABitmap.Height - 1 do
        for x := 0 to ABitmap.Width - 1 do
        begin
          Color := ABitmap.Canvas.Pixels[x, y];
          if Color = LastColor1 then
            ABitmap.Canvas.Pixels[x, y] := LastColor2
          else
          begin
            LastColor2 := NewColor(ABitmap.Canvas, Color, Value);
            ABitmap.Canvas.Pixels[x, y] := LastColor2;
            LastColor1 := Color;
          end;
        end;
    end;function GrayColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
    var
      r, g, b, avg: integer;begin
      if Value > 100 then Value := 100;
      clr := ColorToRGB(clr);
      r := Clr and $000000FF;
      g := (Clr and $0000FF00) shr 8;
      b := (Clr and $00FF0000) shr 16;  Avg := (r + g + b) div 3;
      Avg := Avg + Value;  if Avg > 240 then Avg := 240;  Result := Windows.GetNearestColor(ACanvas.Handle, RGB(Avg, avg, avg));
    end;procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
    var
      x, y: integer;
      LastColor1, LastColor2, Color: TColor;
    begin
      LastColor1 := 0;
      LastColor2 := 0;  for y := 0 to ABitmap.Height do
        for x := 0 to ABitmap.Width do
        begin
          Color := ABitmap.Canvas.Pixels[x, y];
          if Color = LastColor1 then
            ABitmap.Canvas.Pixels[x, y] := LastColor2
          else
          begin
            LastColor2 := GrayColor(ABitmap.Canvas, Color, Value);
            ABitmap.Canvas.Pixels[x, y] := LastColor2;
            LastColor1 := Color;
          end;
        end;
    end;
      

  4.   

    灰度
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
        Button1: TButton;
        ProgressBar1: TProgressBar;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      NewBitmap:tbitmap;
      i,j:integer;
      kl:longint;
      rr,gg,bb:byte;
      res:byte;
    begin
      NewBitmap:=tbitmap.create;
      NewBitmap.Width:=image1.Width;
      NewBitmap.height:=image1.height;
      ProgressBar1.Max:=image1.Width+1;
      for i:=0 to image1.Width+1 do
      begin
        for j:=0 to image1.height+1 do
        begin
          kl:=ColorToRGB(image1.Canvas.Pixels[i,j]);
          rr:=byte(kl);
          gg:=byte(kl shr 8);
          bb:=byte(kl shr 8);
          res:=(rr+gg+bb) div 3;
          NewBitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
        end;
        ProgressBar1.Position:=i;
      end;//for do
      Image1.Canvas.Draw(0,0,NewBitmap);
      NewBitmap.free;
    end;
    end.