0

在我的图像上应用 kernel2d R 代码后,我遇到了一个奇怪的问题。生成的密度图移动了几个像素(向上和右侧)。我加载我的图像,对其设置阈值(直到现在图像完全重叠)。然后我生成一个 > 0 的像素列表。

ListPosPixels=which(ThIv>0, arr.ind = TRUE);

它用作 kernel2d 函数的输入。w 和 height 设置为输入图像的尺寸。对于 h 我选择了不同的值,但它们似乎与班次无关。

res <- kernel2d(as.points(ListPosPixels), poly=cbind(c(0,    d[1], d[1],     0), 
                                                     c(0,       0, d[2], d[2])),
                h0=h, nx=w, ny=height);

然后将图像存储为 png

png(paste('KernelDensity.png', sep=''), width=w, height=height)
par(mar=c(0,0,0,0))
contour(res, add=F, drawlabels=F, col='green',xaxt='n', yaxt='n')

有什么提示吗?谢谢!都林

完整代码示例:

library(EBImage)
require(splancs)


options(max.contour.segments=50000);
ThIv<-readImage('shiftedInput.jpg');
ThIv<-flip(ThIv); #due to plotting
ListPosPixels=which(ThIv>0, arr.ind = TRUE);
d=dim(ThIv);
w <-d[1];
height <- d[2];
res <- kernel2d(as.points(ListPosPixels), poly=cbind(c(0,    d[1], d[1],     0), 
                                                     c(0,       0, d[2], d[2])),
                h0=20, nx=w, ny=height);

png(paste('Kerneldensity.png', sep=''), width=w, height=height)
par(mar=c(0,0,0,0))
contour(res, add=F, drawlabels=F, col='green',xaxt='n', yaxt='n')
dev.off()

上面代码的输入图像

示例图像

4

0 回答 0