我正在进行2d fileting,并希望按元素添加灰度缓冲区的元素。是否有现有功能将为我完成此操作,或者我需要从Scrach中取得一个吗?

是否有一些矩阵类,它将栅格转换为矩阵以简单地删除此问题?

编辑:这是它的一般要点

    BufferedImageOp opX = new ConvolveOp(new Kernel(3,3, kernelX));
    BufferedImageOp opY = new ConvolveOp(new Kernel(3,3, kernelY));
    BufferedImage filtImageX = opX.filter(sourceImage, null);
    BufferedImage filtImageY = opY.filter(sourceImage, null);
    BufferedImage outputImage = addBufferedImages(filtImageX, filtImageY);
.

灰度转换:

public void toGrayscale() { 
     BufferedImageOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
     sourceImage = op.filter(sourceImage, null); 
}
.

有帮助吗?

解决方案

我不熟悉为您那么做的任何java lib。

您可以在[i,j]中获取像素:image.getRGB(i, j);

BufferedImage image = ...;
BufferedImage resultImage = ...

int rgb= image.getRGB(i, j);
resultImage.setRGB(i, j, rgb);
.

您还可以将缓冲的图像转换为字节数组[ https://stackoverflow.com/a/7388025/1007845A>]。
查看此线程:
如何将图像转换为java中的字节数组?获取WritableRaster

编辑:

似乎在这种情况下,writableraster可能有用: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/image/writableraster.html

WritableRaster raster = image.getRaster();

for(int h=0;h<height;h++) {
    for(int w=0;w<width;w++) {
        int colour = 127;
      raster.setSample(w,h,0,colour); 
   }
}
.

其他提示

我不知道直接做到这一点。

但我可以建议一种略微削弱的方法。首先,拍摄你的两个图像,并将它们与两个频段组合成一个图像。我是如何做到这一点的细节。我怀疑你想要创建一个栅格带有 bandedsamplemodel ,和然后将其他两个图像的内容闪烁到其 databuffer 。虽然它看起来你应该能够创建一个双银行数据库,它使用源图像'(一银行)Databuffers的阵列作为银行,这将避免复制。

一旦您有一个双频图像,只需应用 bandcombineop 哪个频带。您需要将求和作为矩阵表示,但这不应该很难。如果您想重新归类结果,我认为它将是[1.0,1.0],或[0.5,0.5]。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top