欢迎来到天天文库
浏览记录
ID:34813365
大小:213.50 KB
页数:10页
时间:2019-03-11
《(canny+算法)地java实现+》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实用标准边缘检测算法的基本步骤(1)滤波。边缘检测主要基于导数计算,但受噪声影响。但滤波器在降低噪声的同时也导致边缘强度的损失。(2)增强。增强算法将邻域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。(3)检测。但在有些图象中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值判定。(4)定位。精确确定边缘的位置。Canny边缘检测算法step1:用高斯滤波器平滑图象;step2:用一阶偏导的有限差分来计算梯度的幅值和方向;step3:对梯度幅值进行非极大值抑制;step4:用双阈值算法检测和连接边缘。效果图如下:代码如下:packagetools; 文档实
2、用标准importjava.awt.*;importjava.awt.image.*; publicclassEdgeDetectorextendsComponent{ publicEdgeDetector(){threshold1=50;threshold2=230;setThreshold(128);setWidGaussianKernel(15);} publicvoidprocess()throwsEdgeDetectorException{if(threshold<0
3、
4、threshold>255)thrownewEdgeDetectorException("Th
5、evalueofthethresholdisoutofitsvalidrange.");if(widGaussianKernel<3
6、
7、widGaussianKernel>40)thrownewEdgeDetectorException("ThevalueofthewidGaussianKernelisoutofitsvalidrange.");width=sourceImage.getWidth(this);height=sourceImage.getHeight(this);picsize=width*height;data=newint[picsize];magnit
8、ude=newint[picsize];orientation=newint[picsize];floatf=1.0F;canny_core(f,widGaussianKernel);thresholding_tracker(threshold1,threshold2);for(inti=0;ithreshold)data[i]=0xff000000;elsedata[i]=-1; edgeImage=pixels2image(data);data=null;magnitude=null;orientation=null;}
9、privatevoidcanny_core(floatf,inti){booleanflag=false;booleanflag1=false;derivative_mag=newint[picsize];文档实用标准floataf4[]=newfloat[i];floataf5[]=newfloat[i];floataf6[]=newfloat[i];data=image2pixels(sourceImage);intk4=0;do{if(k4>=i)break;floatf1=gaussian(k4,f);if(f1<=0.005F&&k4>=2)break;float
10、f2=gaussian((float)k4-0.5F,f);floatf3=gaussian((float)k4+0.5F,f);floatf4=gaussian(k4,f*0.5F);af4[k4]=(f1+f2+f3)/3F/(6.283185F*f*f);af5[k4]=f3-f2;af6[k4]=1.6F*f4-f1;k4++;}while(true);intj=k4;floataf[]=newfloat[picsize];floataf1[]=newfloat[picsize];intj1=width-(j-1);intl=width*(j-1);inti1=wi
11、dth*(height-(j-1));for(intl4=j-1;l4
此文档下载收益归作者所有