图像的边缘检测(100分)

  • 主题发起人 主题发起人 zjxxln
  • 开始时间 开始时间
Z

zjxxln

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥大姐:
谁有图像的边缘检测方面的源代码?
很急。谢谢!
 
有hough变换检测直线的代码吗?
 
没有,我只有边缘增强算法。
 
TO SSGYK:
把你的边缘增强算法发给我号吗?
zjxxln@sohu.com
或者贴出来也可以。
谢谢!
 
可以用拉普拉斯边缘检测算子来做.他是利用高斯滤波器对图象进行平滑.
 
累死我了!我实在是找不到着它了,你查查VC关于图像的资料,它里面就有。
 
http://asp.6to23.com/iseesoft/ipdoc/ip4.htm
 
上面的文档我看过了,可是编程不好实现呀。
最好由源代码。
 
var
bmp: Tbitmap;
i, j, S, Vx , Vy: Integer;
o, t, c, b: pRGBTripleArray;
nb: array[1..3, 1..3] of Integer;
ncount: integer;
begin
bmp := tbitmap.Create;
bmp.Width := image.Width;
bmp.Height := image.Height;
bmp.Assign(image.Picture.Bitmap);

for i := 1 to bmp.Height - 2 do
begin
o := image.Picture.Bitmap.ScanLine;
t := bmp.ScanLine[i - 1];
c := bmp.ScanLine;
b := bmp.ScanLine[i + 1];
for j := 1 to bmp.width - 2 do
begin
nb[1, 1] := t[j - 1].rgbtRed div 255;
nb[1, 2] := t[j].rgbtRed div 255;
nb[1, 3] := t[j + 1].rgbtRed div 255;

nb[2, 1] := c[j - 1].rgbtRed div 255;
nb[2, 2] := c[j].rgbtRed div 255;
nb[2, 3] := c[j + 1].rgbtRed div 255;

nb[3, 1] := b[j - 1].rgbtRed div 255;
nb[3, 2] := b[j].rgbtRed div 255;
nb[3, 3] := b[j + 1].rgbtRed div 255;
//--------Sobel算子 ,边缘可能不止一个像素?
Vx := (nb[1,1] + 2 * nb[1,2] + nb[1,3]) - (nb[3,1] + 2 * nb[3,2] + nb[3,3]);
Vy := (nb[1,1] + 2 * nb[2,1] + nb[3,1]) - (nb[1,3] + 2 * nb[2,3] + nb[3,3]);
if (abs(Vx) + abs(Vy)) = 0 then // nb[2,2]不是边缘 //这里的判断条件,abs(Vx) + abs(Vy)) = 0 不知
// 道对不对,请其他人回答一下
begin
o[j].rgbtRed := 255;
o[j].rgbtGreen := 255;
o[j].rgbtBlue := 255;
end;
end;
end;
bmp.Free;
Image.Refresh;
end;
 
我是用(vx*vx+vy*vy)开方作为r,g,b,
酸法对二值图象很好,对灰度先转化为二值,但效果不好。
检测边缘这个问题就道这里吧,谢谢大家!
 
后退
顶部