canny java_一段java的canny边缘检测代码,求详细注解,越详细越好

privatevoidcanny_core(floatf,inti){//canny算法booleanflag=false;booleanflag1=false;derivative_mag=newint[picsize];floataf4[]=newfloat[i];floataf5[]=newfloat[i];floataf6[]...

private void canny_core(float f, int i) { //canny算法

boolean flag = false;

boolean flag1 = false;

derivative_mag = new int[picsize];

float af4[] = new float[i];

float af5[] = new float[i];

float af6[] = new float[i];

data = image2pixels(sourceImage);

int k4 = 0;

do {

if (k4 >= i)

break;

float f1 = gaussian(k4, f);

if (f1 <= 0.005F && k4 >= 2)

break;

float f2 = gaussian((float) k4 - 0.5F, f);

float f3 = gaussian((float) k4 + 0.5F, f);

float f4 = 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);

int j = k4;

float af[] = new float[picsize];

float af1[] = new float[picsize];

int j1 = width - (j - 1);

int l = width * (j - 1);

int i1 = width * (height - (j - 1));

for (int l4 = j - 1; l4 < j1; l4++) {

for (int l5 = l; l5 < i1; l5 += width) {

int k1 = l4 + l5;

float f8 = (float) data[k1] * af4[0];

float f10 = f8;

int l6 = 1;

int k7 = k1 - width;

for (int i8 = k1 + width; l6 < j; i8 += width) {

f8 += af4[l6] * (float) (data[k7] + data[i8]);

f10 += af4[l6] * (float) (data[k1 - l6] + data[k1 + l6]);

l6++;

k7 -= width;

}

af[k1] = f8;

af1[k1] = f10;

}

}

float af2[] = new float[picsize];

for (int i5 = j - 1; i5 < j1; i5++) {

for (int i6 = l; i6 < i1; i6 += width) {

float f9 = 0.0F;

int l1 = i5 + i6;

for (int i7 = 1; i7 < j; i7++)

f9 += af5[i7] * (af[l1 - i7] - af[l1 + i7]);

af2[l1] = f9;

}

}

af = null;

float af3[] = new float[picsize];

for (int j5 = k4; j5 < width - k4; j5++) {

for (int j6 = l; j6 < i1; j6 += width) {

float f11 = 0.0F;

int i2 = j5 + j6;

int j7 = 1;

for (int l7 = width; j7 < j; l7 += width) {

f11 += af5[j7] * (af1[i2 - l7] - af1[i2 + l7]);

j7++;

}

af3[i2] = f11;

}

}

af1 = null;

j1 = width - j;

l = width * j;

i1 = width * (height - j);

for (int k5 = j; k5 < j1; k5++) {

for (int k6 = l; k6 < i1; k6 += width) {

int j2 = k5 + k6;

int k2 = j2 - width;

int l2 = j2 + width;

int i3 = j2 - 1;

int j3 = j2 + 1;

int k3 = k2 - 1;

int l3 = k2 + 1;

int i4 = l2 - 1;

int j4 = l2 + 1;

float f6 = af2[j2];

float f7 = af3[j2];

float f12 = hypotenuse(f6, f7);

int k = (int) ((double) f12 * 20D);

derivative_mag[j2] = k >= 256 ? 255 : k;

float f13 = hypotenuse(af2[k2], af3[k2]);

float f14 = hypotenuse(af2[l2], af3[l2]);

float f15 = hypotenuse(af2[i3], af3[i3]);

float f16 = hypotenuse(af2[j3], af3[j3]);

float f18 = hypotenuse(af2[l3], af3[l3]);

float f20 = hypotenuse(af2[j4], af3[j4]);

float f19 = hypotenuse(af2[i4], af3[i4]);

float f17 = hypotenuse(af2[k3], af3[k3]);

float f5;

if (f6 * f7 <= (float) 0

? Math.abs(f6) >= Math.abs(f7)

? (f5 = Math.abs(f6 * f12))

蛋疼了,地方不够用

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值