Custom Filter…
เป็นคำสั่งใช้งาน Fourier space filtering โดยการกำหนด spatial domain (non-FFT) ด้วยผู้ใช้งานเอง ด้วยการกำหนดภาพที่จะทำการปรับ filter จำนวน 2 ภาพ สามารถเลือกเอา filter ของอีกภาพมาใช้กับอีกภาพได้
ภาพจะถูกกำหนดเป็นภาพแบบ 8-bit สำหรับค่า pixel ที่มีค่าเป็น 0 จะไม่นำมาใช้ ถ้าค่า pixel เป็น 255 ควรจะนำมาใช้สำหรับการสร้าง spatial frequencies โดยไม่ลดทอนความชัดเจนของพื้นหลัง เป็นวิธีการสร้างการกรอง (filter) ด้วยการวิเคราะห์ความสมมาตรวัดจากจุดศูนย์กลาง จุดที่อยู่ตรงข้ามของจุดศูนย์กลาง (กำหนดด้วย x = width/2, y = height/2) และควรจะถูกปรับเป็นค่าเดียวกัน กรณีอื่น ๆ จะมีเส้นขอบหลังการประมวลผลเกิดขึ้น สำหรับตัวอย่างเพิ่มเติมดูได้จาก
http://imagej.nih.gov/ij/macros/FFTCustomFilterDemo.txt แสดงตัวอย่างได้ดังด้านล่าง
// This macro demonstrates how to use the Process>FFT>Custom Filter command
// delete any existing filter
if (isOpen("Filter")) {
selectWindow("Filter");
run("Close");
}
// Create filter
// Note that the filer does not have to be the same size as the image
size = 256;
newImage("Filter", "8-bit black", size, size, 1);
radius = size/10;
makeOval(getWidth/2-radius, getHeight/2-radius, radius*2, radius*2);
setForegroundColor(255, 255, 255);
run("Fill");
run("Select None");
run("Gaussian Blur...", "radius="+0.9*radius);
//run("Size...", "width=512 height=512 interpolate");
filter = getImageID();
// Create profile plot of filter
makeLine(0, 127, 255, 127);
run("Plot Profile");
run("Duplicate...", "title='Profile of Filter'");
selectWindow("Plot of Filter");
run("Close");
// Open a sample image and do low-pass filtering
run("Bridge (174K)");
//run("Boats (356K)");
//run("Mandrill (70K)");
//run("Lena (47K)");
image = getImageID();
run("Duplicate...", "title='Low-pass Result'");
run("Custom Filter...", "filter=Filter");
run("Enhance Contrast", "saturated=1 ");
// Do high-pass filtering
selectImage(filter);
run("Invert");
selectImage(image);
run("Duplicate...", "title='High-pass Result'");
run("Custom Filter...", "filter=Filter");
run("Enhance Contrast", "saturated=1 ");
run(“Tile");
และ
http://imagej.nih.gov/ij/macros/FFTRemoveStreaks.txt และโค้ดได้งตัวอย่างด้านล่าง
// This macro demonstrates an example of Process>FFT>Custom Filter
// command for removing horizontal interference streaks of different
// amplitude in transmission mode confocal images.
// Author: Gilles Carpentier, Faculte des Sciences et
// Technologies, Universite Paris 12 Val de Marne
// A sample image is available at
// "http://rsb.info.nih.gov/ij/macros/images/MyoblastCells.tif"
// These are myoblast rat cells in early begining of differentiation,
// in vitro. Acquisition by Gilles Carpentier. Dr Isabelle Barbosa
// created the cell culture.
// Image acquisition :
// Confocal microscopy images of myoblasts cells were acquired
// with a Zeiss LSM 410 laser scanning confocal Axiovert 135M
// inverted microscopein in transmission mode with 488 nm
// emission ray of a Ar/Kr used as lighting, no emission
// filter was used. Debluring was performed before FFT treatment.
//Comments:
// Gilles Carpentier(1), Eric Delechelle(2) and Patrick Karasinski(2)
// (1) Faculte des Sciences et Technologies, laboratoire CRRET,
// CNRS, FRE-2412, Universite Paris 12-Val de Marne,
// 61 Avenue du General de Gaulle, 94010 Creteil cedex, France.
// (2) Faculte des Sciences et Technologies, laboratoire LERISS,
// Universite Paris 12-Val de Marne,
// 61 Avenue du General de Gaulle, 94010 Creteil cedex, France.
//Methods were first developped with The NIH Image software.
//Here is a description of the priciple of the method:
// Removal of artifactual horizontal stripes was performed
// using fast Fourrier transform (FFT):
// First, a fast Harley transform procedure is performed on
// a squared 512x512 image, with swapping the quadrants of
// power spectrum. A filtering using a mask in the frequency
// domain is performed [Bracewell,1984]. The vertical
// rectangular area used as mask, is centred on the vertical
// axis of symmetry, and covers about 1 % of the spectrum. This
// mask, used as a filter (zero value), eliminates the periodic
// structures on the Y axis whatever was their frequencies on
// Y axis, and with a very low frequency in the X axis.
// Furthermore, it centrered the histogram by subtracting
// the mean grey level of the image. The inverse FFT was
// performed after using a gaussian transition [Reeves, 1990].
// The final image was then free of horizontal periodic artefacts.
// References :
// Bracewell, R.N., The Fast Harley Transform,
// Proc. IEEE. Vol. 72, /N8, 1984.
// Reeves A.A. Optimized Fast Hartley Transform for the
// MC68000 with Applications in Image Processing. Master
// of Science Thesis, Thayer School of Engineering.
// Dartmouth College Hanover, New Hampshire, 1990.
// delete any existing Transmission_Filter
if (isOpen("Transmission_Filter")) {
selectWindow("Transmission_Filter");
run("Close");
}
// Runs faster in batch mode but this requires ImageJ 1.33o or later.
requires("1.33o");
percent = getNumber("Percent of the half vertical axis of power spectra for hight frequencies:", 0.005);
sdhight = getNumber("Standard Deviation of gaussian transition for hight frequencies:", 3.5);
//setBatchMode(true);
// to get the id number the active image to be treated:
// see http://rsb.info.nih.gov/ij/developer/macro/functions.html
imageid = getImageID();
//get the name and dimensions of the active image to be treated
nomdimage = getTitle;
imagey = getHeight();
imagex = getWidth();
// Create mask filter
size =imagex;
newImage("Transmission_Filter", "8-bit black", size, size, 1);
//make a vertical rectangular (3x(size)) mask centered on the filter image
width=3;
halfwidth=(floor(width/2));
//position of the hight left rectangle selection
//((size/2)-halfwidth);
barre(((size/2)-halfwidth),0,width,size);
// gaussian convolution matrix for a gaussian transition of filter
matrice= matrix(9,40);
selectWindow("Transmission_Filter");
it=4;
for (nconv=0;nconv <it;nconv++) {
run("Convolve...", "text1=["+ matrice+"] normalize");
}
//percent=0.005;
longueur=floor(size*percent);
width=1;
halfwidth=(floor(width/2));
barre(((size/2)-halfwidth),0,width,longueur);
barre(((size/2)-halfwidth),(size-longueur),width,longueur);
//sdhight=3.5;
matrice= matrix(13,sdhight);
run("Convolve...", "text1=["+ matrice+"] normalize");
run("Enhance Contrast", "saturated=0 normalize");
run("Invert");
selectImage(imageid);
run("32-bit");
run("Custom Filter...", "filter=Transmission_Filter");
run("8-bit");
//undo to keep the histogram resulting from the treatment
run("Enhance Contrast", "saturated=0.05 normalize");
exit();
// function to draw white rectangle
function barre(barx,bary,largbar,hautbar) {
makeRectangle(barx, bary, largbar, hautbar);
setForegroundColor(255, 255, 255);
run("Fill");
run("Select None");
}
// square function
function carre (car) {
car= (car * car);
return car;
}
// gaussian convolution matrix function
function matrix (taille,gauss) {
matrice="";
for (j=0; j < taille; j++) {
lignea="";
for (i=0; i < taille; i++) {
numer = -(carre(i-floor(taille/2)) + carre(j-floor(taille/2)));
denom = 2 * carre(gauss);
coeff=exp(numer/denom);
lignea = lignea + " " + coeff;
}
matrice = matrice + lignea + "\n"; }
return matrice;
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น