我正在研究高程地图层次结构,四叉树,为此,我需要将16位灰度图像形式的高程数据集处理成不同级别的不同图像。这大部分是下采样输入数据。
考虑尺寸为14401x10801的输入图块图像,该图像应该被绘制为图像512x512的一部分。
绘制调用看起来像这样:
Graphics2D g2d = (Graphics2D) dstImage.getGraphics();
...
BufferedImage clip = sourceImage.getSubimage(srcX, srcY, srcWidth, srcHeight);
g2d.drawImage(clip , dstX, dstY, dstWidth, dstHeight, null);
其中
srcX = srcY = 0
srcWidth = 14401
srcHeight = 10801
dstX = dstY = 0
dstWidth = 171
dstHeight = 128
正在填充的区域相对而言是正确的,这意味着峰值应该是它们应该的位置。问题是,价值并不完全符合您的预期。具体来说,dst中的像素0,0绝对是海拔零,但是在那里绘制了值64.
查看src图像的内容
sourceImage.getSubimage( 0, 0,
(int)(srcWidth/(double)dstWidth),
(int)(srcHeight/(double)dstHeight));
应该从src图像中产生更多或更少的值,这些值将进入dst中的像素0,0。这些都是零,所以我认为这个问题并没有在某个高峰期撼动价值。更令人困惑的是,所有应为零的像素都设置为64。
出于此处理的目的(因为java无法处理16位灰度中的负值),所有像素都会提升16384.将这些像素提升仅为1000会导致错误-229而不是64.值更改很简单“添加到所有输入“ - > “过程” - > “从所有输出中减去”。
我希望通过简单地完成对图像的所有工作来避免所有重新采样,剪切和效率问题,但到目前为止,似乎java做了一些模糊的颜色映射。
任何想法我可能做错了什么?
答案 0 :(得分:1)
所以我稍微戳了一下代码,出于绝望而开始关闭不应该但可能产生影响的事情。罪魁祸首原来是
{
"fieldname": [
[
"GetIndicatorsByAnalysisProcessIDServlet"
]
]
}
这个暗示并没有......提示......人们如何能够平均超过84次16384而不是16384,但嘿,我是谁来判断。
此提示的文档说明
RENDERING提示是提供高级别的一般提示 建议是否更多地偏向算法选择速度 评估权衡时的质量或质量。对于任何渲染或图像处理操作,都可以参考此提示,但决策通常会优先考虑其他更具体的提示。
也不是很有帮助。
我在java2d中使用渲染提示时已经遇到了一些沮丧,似乎确实存在一些问题。