【发布时间】:2013-05-30 06:29:41
【问题描述】:
我正在尝试使用图像 j 实现中值滤波。 我在填充零时遇到问题,因为它在图片的底部和最左侧添加了额外的零。
这是我到目前为止所做的,如果你们能帮助我:
Dialog.create("9x9 median filtering");
Dialog.addMessage("9x9 median filtering");
Dialog.show();
setBatchMode(true);
median_filter_9();
setBatchMode("exit and display");
// Produce the 9x9 median image
function median_filter_9()
{
width = getWidth();
height= getHeight();
//if you want to apply this median filter to 16bit
depth = bitDepth();
nBin= pow(2, depth);
//nBin hold max gray intensity value
filteHisto = newArray(nBin);
//filteHisto = newArray(255);
fiveBYFive = newArray(81);
//this is what i used for middle position of array to get median
middlePos = round(81/2);
//-3, -3 will get you position 0,0 of a 9x9 matrix if you start in the middle
for(j=-2;j<width-2;j++){
for(i=-2;i<height-2;i++){
z=0;
for(r=0;r<9;r++){
for(c=0;c<9;c++){
//Extend outside image boundaries using zero padding.
//error here: adds extra to bottom and farleft of picture
if(j+r<0||j+r>=width||i+c<0||i+c>=height){
fiveBYFive[z]=0;
z++;
}else{
v = getPixel(j+r,i+c);
fiveBYFive[z]= v;
z++;
}
}
}
//sort the array to find median
Array.sort(fiveBYFive);
median = fiveBYFive[middlePos];
setPixel(j, i, median);
}
updateDisplay();
}
}
【问题讨论】:
-
欢迎来到 Stack Overflow!要求人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)来隔离问题,方法是跟踪程序的进度,并将其与您期望发生的情况进行比较。一旦两者发生分歧,那么您就发现了您的问题。 (然后如果有必要,你应该构造一个minimal test-case。)
-
我第二个@OliCharlesworth。如果您需要进一步的帮助,请告诉我们!
-
@OliCharlesworth 我已经完成了代码的编写,但我被困在零填充上,我们这里没有导师,所以我正在寻求帮助
-
像其他同学一样自己完成 CS373 作业怎么样?
-
我使用乒乓(镜像)填充,这意味着当你接近边缘时,你会得到边缘像素逐渐变大部分的双重表示,但没有人得到超过两个(角落除外)。我从来没有真正想过这有多公平,但这比重写我的内核来选择不同的索引要容易得多。
标签: image-processing filtering median