ข้ามไปที่เนื้อหาหลัก

RANdom SAmple Consensus (RANSAC) algorithm

Introduction

fig. 1 picture from 'Multiview geometry in Computer Vision' book.

If you use orthogonal regression ( minimizes the sum of squared perpendicular distances -- LMS ), there will be a problem if you have an outliers (see fig 1a).

RANSAC algorithm

RANSAC algorithm will cope with this problem by discarding outliers.

Slide from 25th year of RANSAC, Philip Torr slides has very clear picture of the algorithm.






support = number of points that lie within a distance threshold

points within the threshold distance of a line with most support are the inliers.

If a point is an outliers, a line will not have so much support. ( see fig 1b from mvg book above )

Explain the algorithm

- First we randomly pick two red point and estimate m, c for y=mx+c ( this is easy, right )

- for consider if a point is a inlier
for every yellow point (x, y)
If | y - (m*x + c) | < t, number of inlier need to justify model

-- re-estimate m, c again by using all the inlier

sample code ?

a simple python example code for RANSAC is available here.
or more complicate code here. all is the same code as a psudocode from wiki.

or you can use my porting octave code here ( NOTE if you are using matlab, this code should be modified )

# Run RANSAC to see if we can recover the line (y=x) from the data.
function [model_params, model_error, model_inliers] = ransac(data,n,k,t,d)
  % k -- the number of iterations.
  % t -- the threshold for deciding when a data point fits a model (i.e. is an inlier).
  % d -- the number of inliers needed to justify the model.

# k=100,d=20
  model_params = [0.0, 0.0] # slope and intercept
  model_error = 1e6
  model_inliers = []

  for i=1:k # k iterations
      fprintf(1, "new iteraion\n\n")
      inliers = choice(data, n)
   
      # Fit a line (or generally any model) using lstsq.
      a = [inliers(:,1), ones(1, n)']
      b = inliers(:,2)

      # linear least square -- rewrite y = mx+c in y = A*p form
      # A = [x 1]      
      # p = [m, c]
      p = a \ b
    
      compatible = []
      for j=1:size(data, 1)
          fprintf(1, '--')
          pt = data(j,:)
          if abs(pt(2) - dot(p, [pt(1), 1.0])) < t # | y - (m*x + c) | < t
              compatible = [compatible; pt]
          end  
      end  

      if size(compatible, 1) > d
          # The current model is good enough so we should recompute it using all compatible points.
          a = [compatible(:,1), ones(1, size(compatible, 1))']
          b = compatible(:,2)
          p = a \ b
       
          # if residuals < model_error
              model_params = p
              # model_error = residuals
              model_inliers = compatible
          # end
      end
  end

function result=choice(seq, n)
  indx = 1:size(seq)-1
  shuffle(indx)
  result = seq(indx(1:n), :)


adaptively find k (the number of iterations)
k = log(1-p)/log(1-(1-ε)^n)

proof ( ref : wiki ) :

p
= prob(RANSAC algorithm in some iteration selects only inliers )

w = prob( choosing an inlier each time a single point is selected ) = number of inliers / number of all points

A common case is that w is not well known beforehand, but some rough value can be given.

n = Sample Size

wn = prob( n points are inliers )
1 − wn = prob( at least one of the n points is an outlier ) [ bad model will be estimated from this point set ]
( 1 − wk = prob( algorithm never selects a set of n points which all are inliers )
( 1 − wn )k = 1 − p
take log and we will get
k = log(1-p)/log(1-w^n)

It should be noted that this result assumes that the n data points are selected independently, that is, a point which has been selected once is replaced and can be selected again in the same iteration.

Apply to Homography
When adapt this to Homography, estimating line is not a visual line. The error is computing from transfer error d.

This RANSAC for Homography steps are adapt from Alexei (Alyosha) Efros's slide.

RANSAC loop:
1. Select 4 feature pairs (at random)
[ n in the code, or s in the book is fixed to 4 ]
2. Compute homography H (exact)
3. If d(x’, H x) largest set of inliers
[ so the number of inliers needed to justify the model ( d in the code or capital T in the book ) is not used here. ]
5. Re-compute least-squares H estimate on all of the inliers

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

สอบสัมภาษณ์ MBA คำถามและการเตรียมตัว

 * “แนะนำตนเอง” การแนะนำตนเองไม่ใช่แค่บอกชื่อ-นามสกุล ตำแหน่งงาน สถานที่ทำงาน หรือ ประวัติการศึกษาเท่านั้น ข้อมูลเหล่านี้ต้องพูดถึง แต่ไม่ใช่ประเด็นสำคัญ ส่วนที่สำคัญในการแนะนำตนเองก็คือต้องขายความเป็นตัวตนของเรา ความสามารถของเรา และ/หรือวัตถุประสงค์ในการเลือกเรียนหลักสูตรนี้  พยายามตอบคำถามให้สอดคล้องกับ MBA ไม่ต้องนาน ประมาณ 2–3 นาที เน้นเนื้อ ไม่เน้นน้ำ ซ้อมพูดเยอะๆ ถือว่าเป็น First Impression * ทำไมจึงเลือกสมัครเข้าเรียนหลักสูตรนี้  ทำไมถึงมาเรียน MBA ทำไมอยากเรียน MBA ทำไม อยากเรียนตอนนี้  * ทำไม ต้องเรียน MBA ที่นี่ -- ลองศึกษา Program ของมหาลัยที่จะไปดูน้าว่ามหาลัยมีอะไรเด่น * คิดว่าถ้าเรียน MBA จะมี Challenge อะไรบ้าง * สนใจโปรแกรมอะไรบ้าง * หลังเรียนจบอยากทำอะไร * ต้องการอะไรจากหลักสูตรนี้  เรียนแล้วคิดว่าจะได้อะไร เอาไปใช้อะไรในชีวิต * ทำไมไม่เรียนสาขาอื่น ถ้าอายุงานถึงเรียนอย่างอื่นได้ * ในองค์กรที่ทำงานอยู่สามารถเติบโตได้ถึงตำแหน่งไหน * Performance ปัจจุบันเป้นยังไง  * ดูดีอยู่แล้ว แล้วมาเรียน MBA ทำไม เพราะงานที่ทำ...

ส่งไปรษณีย์ทีละมากๆ ที่ช่องไปรษณีย์สำหรับธุรกิจ

  ถ้าเราส่งไปรษณีย์ทีละ 10 กล่องขึ้นไป สามารถไปส่งโดยใช้ช่องทางธุรกิจได้ โดยต้องกรอกใบรับฝากรวม ( Receipt for bulk Posting ) เป็นลิสต์รายการให้เขาไปด้วย โดยกรอกพัสดุแต่ละรายการ และ ไปยื่นให้เขาพร้อมกับพัสดุที่จะส่ง วิธีกรอก คือ ให้กรอกพัสดุแบบเดียวกันไว้แผ่นเดียวกัน  เช่น พัสดุ10 กล่อง กล่องขนาดเท่ากัน น้ำหนักเท่ากันหมด กรอกไว้ 1 แผ่น ถ้าน้ำหนักต่างกัน ขนาดกล่องต่างกัน กรอกแยกแผ่นไว้ดีที่สุด ซึ่งใบนี้สามารถไปขอได้ที่ไปรษณีย์ฝ่ายธุรกิจ สามารถนำมาทำใส่ A4 ก็ได้ ขอบคุณคุณพี่ amarin.ch ที่ไปรษณีย์กลาง ( BANGKOK G.P.O. ) มากๆ นะครับ สำหรับคำแนะนำ ขอบคุณที่ช่วยคีย์ให้ทีละรายการสำหรับมือใหม่ที่ยังไม่รู้ว่ามีใบรับฝากรวมอย่างผมด้วยครับ คราวหน้าผมจะทำใบรับฝากรวมไปครับ

เรื่อง matrix ที่อาจจะลืมกันไปแล้ว

Rank ของ matrix Rank ของ matrix A คือ จำนวน independent columns (หรือ rows) ของ A นั่นคือ square matrix จะ full rank ถ้า ทุกคอลัมน์ independent กัน เมื่อ full rank, det จะ = 0 วิธีหา rank อาจหาได้โดย [U, W, V] = svd(A) แล้วดูว่า rank คือ จำนวน residual ของ W ที่ไม่เป็น 0 full rank = singular matrix = หา inverse ได้ สมบัติของ rank 1. rank(AB) min(rank(A), rank(B)) ย้ำว่า wiki Null Matrix เมตริกซ์ศูนย์ (Zero Matrix หรือ Null Matrix ) คือ เมตริกซ์ที่มีสมาชิกทุกตัวเป็นศูนย์หมด Orthogonal Matrix Cramer's rule Ax = b Cramer's rule ใช้ได้เมื่อ A เป็น square matrix เท่านั้น กรณีที่มีจำนวน สมการ มากกว่าจำนวน ตัวแปร ( A mxn เมื่อ m > n ) หรือเราเรียกว่า over parameter เราไม่สามารถหา inverse ของ rectangular matrix ได้ ให้ไปใช้ psudoinverse แทน x = A + b หรือ หรือ หรือ ไปใช้ SVD แก้สมการซะ คำตอบคือ last col of v ! Gaussian elimination method ใช้แก้สมการ เช่นเดียวกับ กฏของ คราเมอร์ วิธีคิดหลักๆ คือ ทำให้สามเหลี่ยมล่างเป็น 0 ให้หมด โดยทำ row operation จา่กนั้น แทนค่ากลับไป Diagon...

วิธีการไป อย. กระทรวงสาธารณสุขจากหัวลำโพง

ทางไป : รถไฟฟ้า MRT หัวลำโพง ไปลงที่ สถานี กระทรวงสาธารณสุข  ถ้ากดที่ตู้ต้องเปลี่ยนไปหน้าจอสายสีม่วง สนน ราคา 48 53 บาท ต่อมอไซด์ ถ้าไป อย. 20 บาท จากหน้าทางเข้า  ถ้าฝนตกแนะนำให้โบกแท็กซี่จากข้างหน้า ข้างในหาแท็กซี่ยากมาก ถ้าจะเดินประมาณ 2.4 km ให้ระวังหลงเข้าไปรพ ศรีธัญญา รพ ศรีธัญญาพื้นที่ข้างในใหญ่มาก และเหมือนจะล้อมด้วยคลอง เหมือนจะมีทางออกแค่ทางที่เข้าไปนั่นแหละ ทางกลับ : รถเมล์ 97 จาก อย. ตรงข้ามประกันสังคม ทางที่ 1 : ถ้าจะใกล้ลงหน้าปากซอยขึ้นสายสีม่วงที่สถานีกระทรวงสาธารณสุขที่เดิม ทางที่ 2 : ผ่าน ท่าน้ำนนท์​ กลับเรือได้ ทางที่ 3 : ผ่านหน้าพระจอมพระนครเหนือด้วยนะ ผ่าน สถานีรถไฟฟ้า MRT บางซื่อ  ( จาก อย. ไป MRT บางซื่อ 17 บาท,  จาก MRT บางซื่อ ไป MRT หัวลำโพง 44 บาท นั่งกลับได้ 2 ทาง ทางหัวลำโพง กับ ไปเปลี่ยนที่ท่าพระ ไม่รู้ว่าทางไหนเร็วกว่ากัน ) ทางที่ 4 :  ผ่าน สะพานควาย  ทางที่ 5 :  นั่งถึงอนุสาวรีย์ชัยสมรภูมิได้ ค่ารถเมล์ 21 บาท ค่ารถไฟฟ้าไป BTS สะพานตากสิน 47 บาท 

OOTOYA อร่อย ^^

เมนูอาหาร กดที่รูปเพื่อดูรูปใหญ่ อร่อยๆ ^^ ตอนแรกเล็ง เมนูพิเศษของโอโตยะ ไว้ แต่สั่ง สลัดไก่ย่างถ่าน ซอสเบซิล ไป ผักเยอะมากแต่อร่อยดี ยังได้แอบชิมของคนอื่นด้วย ปลาชิมาฮอกเกะย่างถ่าน ตัวเบ้อเริ่มเลยอ่ะ รสคล้ายๆปลาช่อน แล้วก็ของหวาน ไอศกรีมในน้ำเต้าหู้ ที่พี่กุ๋ยบอกว่า เคยเข้ามาที่ร้านแล้วสั่ง อย่างเดียวมาแล้ว ถั่วแดงเขาทำได้อร่อยมาก แต่ดันไม่มีขายถั่วแดงต้มอ่ะดิ เมนูของหวาน กดที่รูปเพื่อดูรูปใหญ่ ถ้าสั่งเป็นชุด ข้าวเติมฟรี เติมไป 2 ชาม น้ำชาเขียว refill ฟรี ชาเขียวที่นี่เขาใส่งาด้วย เหมือนที่เคยกินที่ร้าน อากะ (AKA) ที่ชั้น 7 centralworld บางคนเขาไม่ชอบกัน แต่เราเฉยๆนะ ก็อร่อยดี ข้อเสีย คือ เสริฟ ช้า ไม่ควรกินไปตอนเร่งรีบ แต่ เล็งไว้ละ ไว้จะไปกินใหม่ สาขา และ เบอร์ติดต่อ กดที่รูปเพื่อดูรูปใหญ่

อยู่เหงาๆ เราไปเที่ยว - ไหว้พระขอพร ศาลเจ้าแม่ทับทิม (อาม่า), เจริญกรุง, กรุงเทพ; 天后聖母廟, 石龙軍路, 曼谷, 泰国; Thap Thim Chinese Goddess Shrine, Chareon Krung 63 Road, Bangkok, Thailand

天后聖母廟, 石龙軍路, 曼谷, 泰国 ไหว้ศาลเจ้าแม่ทับทิม ขอให้การค้าเจริญรุ่งเรือง ตำนานเจ้าแม่ทับทิมเกิดที่ตำบลตุ้ยบ๊วย เขตบ่นเซียว เกาะไหหลำ มีผู้เฒ่าแซ่พัว เป็นผู้มีความซื่อสัตย์สุจริต ทำงานขยันขันแข็ง ครั้งหนึ่งแกออกไปหาปลา โดยผูกแหเป็นช้อนดักปลา เวลาผ่านไปแกยังหาปลาไม่ได้ คืนนั้นก็ประสบความล้มเหลว เมื่อช้อนแหขึ้นมาทีไรก้อมีแต่ท่อนไม้ ด้วยความโมโหแกเลยขว้างท่อนไม้นั้นออกไปให้ไกล แต่แล้วเมื่อช้อนแหขึ้นมาใหม่ก็ปรากฏท่อนไม้ท่อนเดิมอีก ต่อจากนั้นแกก็ขว้างท่อนไม้ขึ้นฝั่ง และแกก็ฉุก คิดว่าแปลกที่ท่อนไม้ธรรมดาจะสามารถลอยทวนน้ำได้ คงจะเป็นสิ่งวิเศษ และแกก็ได้นำท่อนไม้นั้นขึ้นฝั่ง และเพ่งมองท่อนไม้นั้นพร้อมกับอธิษฐานว่า หากท่อนไม้นี้มีความศักดิ์สิทธิ์ขอให้คืนนี้จับปลาได้มาก เมื่อพ้นจากความจนแล้ว เมื่อขึ้นฝั่งจะนำท่อนไม้นี้แกะสลักเป็นเทวรูปศักดิ์สิทธิและสักการะบูชาเช้าวันไม่ให้ขาด เมื่ออธิษฐานจบแกเอาท่อนไม้นั้นวางบนหัวเรือ ปรากฏว่าช้อนเพียงสองถึงสามครั้งก็ได้ปลาตัวโตเต็มเรือ จึงนำปลาขึ้นฝั่งวันนั้นปลาของแกขายได้ราคา เพราะชาวประมงคนอื่นจับได้น้อยแกจึงมีเงินจับจ่ายใช้สอย และทุกครั้งที่แกออกหาปลา ...

คำนวณค่าน้ำมัน

ใครทำไว้ไม่รู้แต่แบบว่าดีย์  ตัวอย่างวิธีคิด  ( น้ำมันลิตรละ 22 บาท/ลิตร ) / ( ใช้น้ำมัน/กิโลเมตรต่อลิตร 10 กม/ลิตร ) * 40 กม = 88 บาท ถ้ารถติดใช้น้ำมัน 10-14 กม. / ลิตร ถ้าทางตรงวิ่งปกติ 15-20 กม / ลิตร ราคารถไฟฟ้าไปกลับ 118 บาท แถมต้องต่อรถหลายต่อดีออก

ข้อแตกต่างระหว่าง Mahalanobis distance กับ Euclidean Distance : ทำไม และ เมื่อไหร่ ต้องใช้ Mahalanobis distance ใน data mining

Euclidean Distance นิยาม EuclideanDistance = sqrt(sum( (A - B) .^ 2 )) โชว์เหนือ เขียนแบบ linear algebra EuclideanDistance = norm(A - B) ข้อเสียของ Euclidean distance 1. sensitive to scales ของตัวแปร ในกรณี geometric ตัวแปรทุกตัวมีหน่วยเดียวกันหมด คือ ระยะทาง แต่เมื่อพิจารณาตัวแปรที่มีข้อมูลหลายชนิดพร้อมๆกัน เช่น ใน data mining เราอาจจะพิจารณา อายุ, ความสูง, น้ำหนัก ฯลฯ พร้อมๆกันหมด สเกลมันเอามาเปรียบเทียบกันไม่ได้ 2. Euclidean distance ใช้กับตัวแปรที่ correlated กันไม่ได้ เช่น สมมติว่าเรามี data set 5 ตัวแปร ที่ซึ่งค่าของตัวแปรหนึ่งเหมือนกับอีกตัวแปรหนึ่งเด๊ะๆ ( กรณีนี้เหมือนเด๊ะ เลยเป็น completely correlated ) Euclidean distance จะคำนวณโดย weight ข้อมูลที่ซ้ำกันมากขึ้น ทำให้มีปัญหา Mahalanobis distance นิยาม เมื่อ S คือ covariance matrix และ x, y มี distribution เดียวกัน Mahalanobis distance มันพิจารณ่า covariance matrix ไปด้วย เลยขจัดปัญหาเรื่อง scale และ correlation ที่ Euclidean Distance มีได้ ใน MATLAB ใช้ฟังก์ชั่น mahal() หรือ pdist() ดูตัวอย่าง mahaldist.m ของคุณ Peter J. Ackl...

วิจารณ์ แสงแห่งศตวรรษ syndrome of the century ( สปอยแหลก )

แสงแห่งศตวรรษ ใครอยากไปดูในโรงหนัง หรือ จะซื้อแผ่นที่ uncensor มาดู หยุดอ่านซะ เดี๋ยวรู้เรื่องก่อนแล้วไม่สนุก เราดูเวอร์ชั่น uncensor จนจบแล้ว อ่านในบล๊อกเขาที่เขาอธิบายความหมายแล้ว ขอบคุณ neogravity สำหรับแผ่นนะครับ ความเห็นส่วนตัวเรื่องการเซ็นเซอร์หนังเรื่องนี้ 1. บรรทัดฐานการเซ็นเซอร์ไม่เหมือนกัน ทั้งหนังโรงไทย หนังโรงฝรั่ง หรือ ละครโทรทัศน์ 1.1 ของขึ้น ดูแล้วน่าจะเป็น "ของปลอม" แต่กลับไม่มีการเซ็นเซอร์ "ของปลอม" ในหนังฝรั่งหลายๆเรื่อง 1.2 ไม่รู้ว่าเป็นหน่วยงานเดียวกันหรือเปล่าที่เซ็นเซอร์ โรงหนัง กับ ละครโทรทัศน์ แต่ควรเป็นบรรทัดฐานเดียวกัน หมอกินเหล้า จากที่ดู หมอในเครื่องแบบไม่ได้จิบเหล้า ทั้ง อาจารย์หมอที่เทเหล้า ก็ไม่ได้ใส่เครื่องแบบ เหมือนในเรื่อง สงครามนางฟ้า พระดีดกีตาร์ โดนเซนเซอร์ แต่พระเอกข่มขืนนางเอกในละคร ฉายได้ ( จริงๆ มีโอกาสเป็นไปได้ โดยอารมณ์ของตัวหนัง ที่ทำให้พระไปดีดกีตาร์ได้ จริงอยู่เป็นเรื่องที่ไม่เหมาะ (อ่านในความเห็นส่วนตัวเกี่ยวกับหนังเรื่องนี้ ข้อ 11) แต่ด้วยเหตุผลหลายๆเรื่องย่อมเป็นไปได้ และภาพที่ออกม...

อยู่เหงาๆ เราไปเที่ยว - เที่ยวอินเดีย Mamallapuram, Tamil Nadu, India มามาละปุรัม รัฐทมิฬนาดู ประเทศอินเดีย ตอนที่ 10 Shore Temple

ต่อไปเราจะพาไปยัง อีก หนึ่ง มรดกโลก ของอินเดีย นั่นก็คือ Shore Temple (เทวาลัยชายหาด) นั่นเองน้ะจ้ะ อันที่จริง เทวาลัยชายหาด มีชื่อว่า ราชสิงเหศวร จ่ะ แต่เราคิดว่า เรียก Shore Temple ก็จำง่ายดีน่ะ Shore Temple หรือ เทวาลัยชายหาด Mamallapuram จากคราวก่อนที่เราไม่ได้ตีตั๋วที่ ปัญจปาณฑพรถะ อาศัยชะเง้อ ชะแง้ ดูเอา แต่คราวนี้ ชะเง้อ ไม่ได้แบ้วแจ้ เพราะว่า เขาล้อมรั้วไว้ไกลจาก Shore Temple น้ะจ้ะ #เราพยายามแล้ววววว ด้วยความอยากไปดู เลยยอมตีตั๋วจ้ะ ... วราหาวตาร คือ พระนารายณ์อวตารเป็นหมูป่า ขุดดุนแผ่นดินโลกขึ้นจากอสูรที่ซ่อนไว้ใต้บาดาล พบเมื่อปี 2533 / 1990 จ้ะ หมูยืนก้มหน้า หรือ วราหาวตาร นี้ เป็นงานศิลปะ ที่เจ๋งน้ะจ้ะ เพราะ แต่ก่อน มีน้ำขึ้นน้ำลง วราหาวตาร จะมีชีวิต กอบกู้แผ่นดินขึ้นจากมหาสมุทรทุกวัน ดังเช่นตำนานเลยจ้า เทวาลัย ชายหาด จ้ะ เทวาลัยชายหาด สร้าง กลาง พุทธศตวรรษที่ 13 จ้ะ กี่ปีมาแล้ว ก็บวกลบกันไป เดินดูรอบๆ น้ะจ้ะ จะเล่าเรื่องชื่อเมืองมาให้นิดนึง น้ะจ้ะ จะเห็นว่า เราบอกคนอื่น ว่า ไป มหาบุรีปุรัม ( mahabulipuram ) ซึ่งนั่นเป็นคำที่ เพื่อน...