【问题标题】:I want to display a blurred image in imageJ. Why doesn't this work?我想在 imageJ 中显示一个模糊的图像。为什么这不起作用?
【发布时间】:2011-08-23 13:53:28
【问题描述】:

我对 imageJ 非常陌生,但会一点 Java。

基本上我想从 OpenDialog 打开一个文件显示图像,然后模糊图像并显示生成的模糊图像。我的程序可以编译,但是这两个图像看起来一样。有人可以帮忙吗?如何让程序显示模糊和不模糊的图像?

import ij.*;
import ij.io.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
import java.util.*;
import java.io.*;


public class opens_ implements PlugIn {

    ImagePlus imp;

    public void run(String arg){
    OpenDialog od = new OpenDialog("Open.....", arg);
    Opener op = new Opener();
    String directory = od.getDirectory();
    String filename = od.getFileName();
    if (filename==null) return ;
    imp =  op.openImage(directory, filename);
    imp.show(); 

    ImageProcessor improc = imp.getProcessor();
    improc.smooth();

    ImagePlus alter = new ImagePlus("alter", improc) ;
    alter.show();


    }

}

谢谢

贝特曼

【问题讨论】:

  • 两张图片都显示出来了,都没有模​​糊。

标签: java imagej


【解决方案1】:

当您在improc 上调用.smooth() 时,该调用会更改ImageProcessor 包含的图像数据,而原始ImagePlus 正在显示该图像数据。然后基于相同的ImageProcessor 创建一个新的ImagePlus,所以它当然是模糊图像而不是原始图像。如果您不希望更改原始文件,则可以在平滑之前复制ImageProcessor,例如通过更改行:

ImageProcessor improc = imp.getProcessor();

...到:

ImageProcessor improc = imp.getProcessor().duplicate();

更新:当我测试你的代码时,我发现两张图片都是模糊的。如果您仍然看到原始图像,请尝试将以下内容添加到 run 方法的末尾:

imp.updateAndDraw()
alter.updateAndDraw()

【讨论】:

  • 两张图片都显示出来了,都没有模​​糊。
  • 谢谢,我知道 updateAndDraw() 也应该显示图像,但是当我从上面的代码中删除 imp.show() 并添加 imp.updateAndDraw() 和 alter.updateAndDraw() ,程序编译但不显示图像。有什么进一步的建议吗?感谢您的宝贵时间。
  • 您需要.show() 以确保ImagePlus 窗口完全显示,而不是隐藏。 .updateAndDraw() 调用只是告诉ImagePlus 从像素数据中重绘,如果您没有使用.show() 显示窗口,则不会有任何效果
猜你喜欢
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 2019-10-23
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
相关资源
最近更新 更多