RSS

วันศุกร์ที่ 26 สิงหาคม พ.ศ. 2554

ให้ความรักยึดครองทุกสิ่ง ด้วยเวทมนต์แห่งคณิตศาสตร์ (love everywhere)

     เรื่องมันมีอยู่ว่า วันหนึ่ง(นานแล้วละ ) ผมกำลังเบื่อๆ ไปมีอะไรทำ เรียกได้ว่ากำลังเบื่อๆ เลยทีเดียว ก็เลยค้น Youtube เล่น ไปเจอเข้ากับ MV ใหม่ของ Black Eye Peas เพลง Just Can’t Get Enough. ซึ่งตอนนั้นกำลังมาใหม่เลยทีเดียว เป็น MV ให้อารมห์ เหงาๆ ภายใต้แสงสีในค่ำคืนของเมืองญี่ปุ่นที่ไม่รู้จะหรูไปไหน แล้วผมก็สะดุดเข้ากับ ภาพอันล่างนี้เข้าละครับ ทุกสิ่งกลายเป็นรูปหัวใจโดนความรักเข้าครอบงำ
     ผมรู้ครับว่าภาพนี้สร้างโดยการใช้เทคนิคที่รูรับแสงที่เรียกว่า “Bokeh” โดยคิดว่าน่าจะไม่ผิดนะ (The Black Eye Peas ชอบมาด้วยเทคนิคการสร้างแบบล้ำๆอยู่แล้ว ) คือเมื่อแสงที่มาแบบห่างจากจุดโฟกัสเรามากๆ มันก็จะ เบลอออกเป็นวงๆ แต่แล้วเขาก็ติดตั้งอุปกรณ์ที่เรียกว่า Aperture Blades รูปหัวใจเข้าไป เพื่อตัดแสงที่เบลอออกมาเป็นรูปหัวใจซะ

     แล้วผมก็มีความคิดดีดีว่ามันคงจะดี ถ้าเราจะเอาอย่างบ้าง แต่คราวนี้ ใส่มันไปทั่วเลยเป็นไงละ ปัญหาก็คือเราไม่มี อุปกรณ์พวกนั้นนี้สิ จะทำอย่างไงดี


     แน่นอนว่าผมต้องมีทางออกอยู่แล้ว (ไม่งั้นไม่มาเขียนให้เสียเวลาหรอก) แต่ก็ใช้ว่าจะง่ายดายนัก สิ่งที่ผมเริ่มลองทำเป็นอย่างแรกนั้นก็คือ ลองขีดๆเขียนๆ สร้างเ Matrix ขึ้นมาอันหนึ่งก็กะจะให้เป็น Filter Matrix โดยในใจก็นึกถึง Point Spread Function (PSF) ไปด้วยเวลาเขียน ร่างสัตส่วนต่างๆนานาแล้ว (ไม่จำเป็นต้องเข้าใจก็ได้นะ คิดว่าน้อยคนคงรู้เรื่อง) สุดท้ายก็คือจบครับ ทำไมนะหรอ ก็จะทำรูปหัวใจสวยได้มันต้องใช้ Matrix ใหญ่พอตัว แต่กว่าเราใจทำตัวเลขได้ครบก็.... เอาเวลาไปทำอย่างอื่นดีกว่า (เรียกง่ายๆว่าขี้เกียจ)
     เวลาผ่านไปอีกหน่อย ผมก็มาเจอกับ OpenCV เป็นอะไรที่จะมาทำให้เรื่องนี้ง่ายขึ้นมากเลย ผมเลือกใช้ cvFilter2D แล้วก็ เหลือแต่สร้าง Matrix รูปหัวใจมากเป็น Kernel ให้ ซึ่งก็ใช้ Matrix ขนาด 13*13 เรียกว่าใหญ่พอตัว ใช่เวลาหน่อย แต่มันก็ออกมาก็ไม่น่าประทับใจเท่าไร (บอกแล้วว่าไม่จำเป็นต้องเข้าใจศัพย์เทคนิคนี้ก็ได้)
     เวลาผ่านไปอีกพักหนึ่ง จนมาถึงวันก่อนเขียน Blog นี้ผมก็เริ่มเห็นความจริงว่ามันเป็นเพราะเรื่อง Point Spread Function ที่เคยคิดไว้ก่อน มันมาบังตาทำให้เรา ไม่ได้มองเรื่องอื่น ผมเจอทางที่ดีและเหมาะเข้าแล้ว ผมจะใช้ Dilate Function ว่าแล้วก็ลงมือวาด Kernel รูปหัวใจ ด้วยชุดตัวเลข แต่คราวนี้เพิ่มาขนาดเป็น 15*15


     แล้วก็ร่ายมนต์ C++ Code ออกมา

 
#include 
#include 
#include 
#include 
#include 
#include 

OPENFILENAME opendlg;
char filename[MAX_PATH]={0};

char *OpenImageFromFile(void)
{
    memset(&opendlg, 0, sizeof(opendlg));
    opendlg.lStructSize = sizeof(opendlg);
    opendlg.lpstrFile   = filename;
    opendlg.nMaxFile    = sizeof(filename);
    opendlg.lpstrFilter = "Image Files *.bmp, *.jpg, *.png\0*.bmp;*.jpg;*.png\0";
    GetOpenFileNameA(&opendlg);
    return(filename);
}

int main()
{
    using namespace cv;
    char key=0;
    IplImage *pImg;
    IplImage *dst;
       int cArray[225]={
        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
        0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0,
        0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0,
        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
        0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
        0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
        0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0
       };
    IplConvKernel* element = cvCreateStructuringElementEx( 15, 15, 7, 7, CV_SHAPE_CUSTOM, cArray);
    cvNamedWindow("Out", CV_WINDOW_AUTOSIZE);
            printf("File Name : %s\n", OpenImageFromFile());
            pImg = cvLoadImage(filename);
            cvDilate(pImg,pImg,element,1);
            cvSmooth(pImg,pImg,CV_GAUSSIAN);

            if(pImg==0)
                printf("Cannot open file.\n");
            else cvShowImage("Out", pImg);

    cvWaitKey(0);
    cvReleaseImage(&pImg);
    cvDestroyWindow("Out");
    return 0;
}
(นี้เป็นเพียงบางส่วนเท่านั้น ของ Code เท่านั้น ไม่ต้องแปลกใจถ้ามัน Copy ไปแล้วใช้ไม่ได้)
ถ้าสังเกตจะเห็น Matrix รูปหัวใจของผม ถ้าเห็นไม่ถนัด ลอง Ctrl+f แล้วพิมพ์ "1," มองดูสิ (สวยงามมาก)
 
ทันใดนั้นโลกก็โดนความรักเข้าครอบครอง
ตั้งแต่ Hong Kong
ถึง Las Vegas เมืองแห่งแสงสี

 
ไป London เมืองผู้ดี
london2
 
Mosco ที่ Yuri ชอบเอา ระเบิดไปถล่ม ตอนนี้ก็โดนความรักเข้ายึกครอง
mosco out
ภูเก็ต

Berlin

หรือ Rome เมืองแห่งศิลปะ และประวัติศาสตร์

แม้นแต่กรุง Seoul ประเทศเกาหลี

และก็ที่กรุงเทพ ริมแม่น้ำเจ้าพระยา


ชอมมาเลย มีหัวใจลอยอยู่ยอด ตึก

0 ความคิดเห็น:

แสดงความคิดเห็น

Related Posts Plugin for WordPress, Blogger...

บทความที่ได้รับความนิยม