Я хочу отобразить размытое изображение в imageJ. Почему это не работает? - PullRequest
0 голосов
/ 23 августа 2011

Я очень новичок в 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();


    }

}

Спасибо

Bateman

1 Ответ

4 голосов
/ 23 августа 2011

Когда вы вызываете .smooth() на improc, этот вызов изменяет данные изображения, содержащиеся в ImageProcessor, которые отображаются оригиналом ImagePlus. Затем вы создаете новый ImagePlus на основе того же ImageProcessor, поэтому, конечно, это размытое изображение, а не оригинал. Если вы не хотите, чтобы оригинал был изменен, вы можете продублировать ImageProcessor перед сглаживанием, например, изменив строку:

ImageProcessor improc = imp.getProcessor();

... до:

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

Обновление: когда я тестировал ваш код, я видел оба изображения размытыми. Если вы по-прежнему видите исходные изображения, попробуйте добавить следующее в конец метода запуска:

imp.updateAndDraw()
alter.updateAndDraw()
...