Marr边缘检测算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.Marr边缘检测算法
procedure TImageProcessForm.MarrClick(Sender: TObject);
var
i,j:integer;
p1,p2,p3,p4,p5,p:pByteArray;
begin
self.DoubleBuffered := true; //采用双缓冲模式
TestBMP.Assign(WillbeChangedBmp);
ProcessedBmp.Assign(WillbeChangedBmp);
for j:=2 to TestBMP.Height-3 do
begin
p:=TestBMP.ScanLine[j];
p1:=ProcessedBmp.ScanLine[j-2];
p2:=ProcessedBmp.ScanLine[j-1];
p3:=ProcessedBmp.ScanLine[j];
p4:=ProcessedBmp.ScanLine[j+1];
p5:=ProcessedBmp.ScanLine[j+2];
for i:=2 to TestBMP.Width-3 do
begin
p[i*3]:=min(255,max(0,(
-2*p1[(i-2)*3]-4*p1[(i-1)*3]- 4*p1[i*3]-4*p1[(i+1)*3]-2*p1[(i+2)*3]
-4*p2[(i-2)*3] + 8*p2[i*3] -4*p2[(i+2)*3]
-4*p3[(i-2)*3]+8*p3[(i-1)*3]+24*p3[i*3]+8*p3[(i+1)*3]-4*p3[(i+2)*3]
-4*p4[(i-2)*3] + 8*p4[i*3] -4*p4[(i+2)*3]
-2*p5[(i-2)*3]-4*p5[(i-1)*3]- 4*p5[i*3]-4*p5[(i+1)*3]-2*p5[(i+2)*3])
));
p[i*3+1]:=min(255,max(0,(
-2*p1[(i-2)*3+1]-4*p1[(i-1)*3+1]-4*p1[i*3+1]-4*p1[(i+1)*3+1]-2*p1[(i+2)*3+1]
-4*p2[(i-2)*3+1]+8*p2[i*3+1]-4*p2[(i+2)*3+1]
-4*p3[(i-2)*3+1]+8*p3[(i-1)*3+1]+24*p3[i*3+1]+8*p3[(i+1)*3+1]-4*p3[(i+2)*3+1]
-4*p4[(i-2)*3+1]+8*p4[i*3+1]-4*p4[(i+2)*3+1]
-2*p5[(i-2)*3+1]-4*p5[(i-1)*3+1]-4*p5[i*3+1]-4*p5[(i+1)*3+1]-2*p5[(i+2)*3+1])
));
p[i*3+2]:=min(255,max(0,(
-2*p1[(i-2)*3+2]-4*p1[(i-1)*3+2]-4*p1[i*3+2]-4*p1[(i+1)*3+2]-2*p1[(i+2)*3+2]
-4*p2[(i-2)*3+2]+8*p2[i*3+2]-4*p2[(i+2)*3+2]
-4*p3[(i-2)*3+2]+8*p3[(i-1)*3+2]+24*p3[i*3+2]+8*p3[(i+1)*3+2]-4*p3[(i+2)*3+2]
-4*p4[(i-2)*3+2]+8*p4[i*3+2]-4*p4[(i+2)*3+2]
-2*p5[(i-2)*3+2]-4*p5[(i-1)*3+2]-4*p5[i*3+2]-4*p5[(i+1)*3+2]-2*p5[(i+2)*3]+2)
));
end;
end;
ChangedBmp.Assign(TestBMP);
ShowChangedBmp;
end;