【发布时间】:2015-04-27 14:32:39
【问题描述】:
我正在对二元稻谷图片应用膨胀操作。当使用的结构元素大小为 9x9 时,噪声粒子会变大,这是合乎逻辑的。但是当我使用大小为 15x15 的结构元素时,我会得到与原始噪声粒子相邻的新噪声粒子。这很令人困惑,因为我不知道为什么会这样。结构元素是一个全为 1 的 nxn 矩阵。图片已附上供参考。
参考图片:
放大图像(9x9 SE):
放大图像(15x15 SE):
请帮忙!!
代码:
void DilateBinary(Mat Image, Mat& op, double* SE, int m){
op=Image.clone();
double pixelvalue;
int limit=(m-1)/2;
for(int y = limit; y < (Image.rows - limit); y++)
{
for(int x = limit; x < (Image.cols - limit); x++)
{
double max=0.0;
//printf("Input pixel: %u \n",Image.at<unsigned char>(y,x));
for(int j = -limit; j <=limit ; j++)
{
for(int i = -limit; i <=limit ; i++)
{
if(*(SE + (j+1)*m + (i+1) ) > 0)
{
pixelvalue = (*(SE + (j+1)*m + ((2*limit)-(i+1)) )) * (Image.at<unsigned char>(y+j,x+i));
//printf("%f",pixelvalue);
if (pixelvalue>127)
max=255.0;
}
}
}
op.at<uchar>(y,x) = max;
//printf("Output pixel: %u \n",op.at<unsigned char>(y,x));
//printf("Modified pixel= %f %d\n",pixelvalue,cvRound(pixelvalue));
}
}
注意:SE 是指向我正在使用的掩码/SE 的指针。 & m 对于 9x9 SE 是 9,对于 15x15 SE 是 15......
【问题讨论】:
-
那么您的问题到底是什么?为什么会发生这种情况或如何摆脱它们?还请标记您正在使用的编程语言。是matlab吗?谢谢!
-
我认为这不应该发生。如果它是正确的,那么它为什么会发生。如果错了,那是怎么回事,我该如何纠正。
-
我用的是C,代码已经插入到语句中了。
-
掩码中的索引看起来不对,你会得到负索引。
-
我很确定索引是正确的。它给出了高达 9x9 SE 的正确结果。我只收到 15x15 SE 的错误(如果是一个)。
标签: c image image-processing mathematical-morphology image-morphology