Monday, March 21, 2011

ImageJ 6: Basic Gray-level Thresholding

การทำ Gray-level Thresholding ก็คือการเปลี่ยนจากรูปสีเทาให้เป็นรูปขาวดำ โดยอาศัยค่า Threshold เป็นตัวแบ่ง ด้วยหลักการง่ายๆ เช่น

ถ้าเลือกค่า Threshold เป็น 100 ดังนั้น ทุกพิกเซลที่มีค่าน้อยกว่าหรือเท่ากับ 100 ให้มีค่าเป็น 0 (ดำ) นอกนั้นให้มีค่าเป็น 255 (ขาว) เช่น


หลังจากทำ Thresholding

สำหรับ ImageJ มีฟังก์ชันในคลาส ImageProcessor ชื่อ void threshold(int) เพื่อทำหน้าที่นี้

ลองดูตัวอย่างครับ
import ij.IJ;
import ij.ImagePlus;
import ij.plugin.filter.PlugInFilter;
import ij.process.ImageProcessor;

public class My_Threshold implements PlugInFilter
{
 public int setup(String arg, ImagePlus imp)
 {
  return DOES_8G;  //accept only 8-bit grayscale image
 }

public void run(ImageProcessor ip)
{
 int th = (int) IJ.getNumber("Threshold value (0-255)",100);
 if(th==IJ.CANCELED) //if click cancel
  return;

 if((th<0) || (th>255)){
  IJ.error("Error","0-255 only");
  return;
 }

 ip.threshold(th);
 //thresholding
 /*
 int MN = ip.getPixelCount();
 for(int p=0;p<MN;p++){
  if(ip.get(p)<=th)
  ip.set(p,0);
  else
  ip.set(p,255);
 }
 */
 }
}

1 comment:

  1. คือว่าผมใช้ VC++ อะครับ

    พอจะทราบไหมครับว่า จะแปลงจาก YCrCb ไปเป็น GRAY ทำยังไงครับ

    ReplyDelete