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

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 − wn k = 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

ความคิดเห็น

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

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

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

แนะนำ ยาบำรุงครรภ์ จับซาไท้เป้า หรือ 13 องครักษ์พิทักษ์ครรภ์ ยาจีน บำรุงครรภ์

จับซาไท้เป้า  ยาบำรุงครรภ์ สมุนไพรจีน ช่วงนี้เพื่อนๆ เริ่ม ทยอย แต่งงาน กันแล้ว นะครับ เราเองก็มียาจีนมา นำเสนอ ซึ่งเป็น ยาดี ที่คุณแม่ ของเรา ทาน ตอนคลอดเรา นั่นก็คือ "จับซาไท้เป้า" ยาบำรุงครรภ์ นั่นเอง เงง เงง เงง เงง จับซาไท้เป้า เป็น ยาจีน ซึ่ง ประกอบไปด้วย สมุนไพร จีน 13 อย่างด้วยกัน มี สรรพคุณ เป็น ยาบำรุงครรภ์ บำรุง ทั้งคุณแม่ และ คุณลูก เลย เรียกได้ว่า สรรพคุณ ครบครัน บำรุง คุณแม่ ช่วงตั้งท้อง ช่วยให้ คุณลูก แข็งแรง มีผิวพรรณ สะอาดสะอ้าน ในตอนที่คลอดออกมา จะ คลอดง่าย ตัวจะไม่มีคราบไขมันติดเยอะ จ้า วิธีกินจับซาไท้เป้า ทานตั้งแต่ท้อง 5 เดือนขึ้นไป 2 อาทิตย์ทาน 1 ห่อ ทานจนคลอด ศิริรวมแล้ว ถ้าทาน ครบ dose โดยเริ่มตั้งแต่ 5 เดือน ต้องทานทั้งหมด 10 ห่อ จ้ะ วิธีต้มจับซาไท้เป้า  1 ห่อ ต้มได้ 2 ครั้ง ครั้งแรก ใส่น้ำ 3 ถ้วย ต้มเหลือ 8/10 ถ้วย ครั้งที่ 2 ใส่น้ำ 2.5 ถ้วย ต้มเหลือ 7/10 ถ้วย ซื้อที่ไหนดี หลายๆ คน มักจะมีคำถาม ว่า จับซาไท้เป้า ซื้อที่ไหน  ซึ่งเราเอง แนะนำร้านขาย จับซาไท้เป้า ซึ่งก็คือ ร้าน ขายยา ย่ง เช...

อยู่เหงาๆ เลาไปเที่ยว - เที่ยวเชียงรายด้วยตัวเอง โดยไม่มีรถ เช่ารถก็ไม่ได้เช่าน้ะจ้ะ นั่งรถสาธารณะล้วนๆแจร้ ตอนแรก : วางแผนเที่ยว

เชียงราย ม่วนใจ๋ ยอมรับเลยว่า หาข้อมูลค่อนข้างยาก กระทู้รีวิว ใน pantip ที่บอกไม่มีรถไป คือ ไม่มีรถส่วนตัวไป สุดท้ายก้อไปเช่ารถขับกันหมด สุดท้ายเลาก็ไปผจญภัยมาจนได้ นี่คือตอนแรกซีรี่ส์เชียงรายของเราน้ะจ้ะ  กล่าวถึงว่า จะไปไหนบ้าง และ วิธีเดินทางในตัวเมืองเชียงราย และ ออกนอกเมืองเชียงรายไปยังที่เที่ยวยังไง 0) ตั๋ว 0 บาท จริงๆ ทริปนี้จับพัดจับผลู ดันกด ตั๋ว 0 บาท ได้ของ VietJet ซึ่งเขาเพิ่งเปิดเส้นทางใหม่ กรุงเทพฯ-เชียงราย เลยมีโปรโมชั่นนี้ออกมา จริงๆ บอกว่า 0 บาท แต่มันมีค่าภาษีสนามบิน ค่าอื่นๆ อีก รวมแล้วไปกลับ 508 บาทน้ะจ้ะ ( ภาษีสนามบิน 100 THB, PMT Fee 77 THB, Admin Fee Domestic Thai 77 THB รวมสองขา 508 บาท รวม VAT เป็น 529.56 บาท ) เวลาค่อนข้างโอเคนะ มีคนเคยบอกว่า low cost เวลาไม่ค่อยโอเค แต่เลาว่าเวลานี่โอเคเลย ขาไป 06.30 สนามบินสุวรรณภูมิ - 07.55 สนามบินแม่ฟ้าหลวงเชียงราย ขากลับ 15.15 สนามบินแม่ฟ้าหลวงเชียงราย - 16.45 สนามบินสุวรรณภูมิ ขึ้นที่สนามบินสุวรรณภูมิ (BKK) จย้ะ ไม่ใช่สนามบินดอนเมือง มีคนบอกว่าให้สังเกตรหัสถ้า BKK คือ สนามบินสุวรรณภูมิ อย่าไปผิดส...

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( Vedic Mathematics example )

จากที่สงสัยเรื่อง ลูกคิด ของ จินตคณิต ที่ลองไปค้นดู ปรากฎว่า เจอ เวทคณิต ซึ่งเขาบอกว่า อยู่ในคัมภีร์พระเวท ลองอ่านดูแล้ว รู้สึกว่าฝึกสมอง ก็ทำให้คิดเลขเร็วดี เลยสรุปมาให้ ตามนี้ Tutorial 1 การลบเลข ALL FROM 9 AND THE LAST FROM 10 ทุกตัวลบจาก 9 และตัวสุดท้ายลบจาก 10 เช่น 1000 - 357 = 643 10,000 - 1,049 = 8951 ถ้า 1,000 - 83 ให้มองว่ามี 0 อยู่ข้างหน้า เป็น 1,000 - 083 = 917 ฝึกบ่อยๆ ก็คล่อง แล้วก็ไม่ต้องใช้เครื่องคิดเลขด้วย ลองทำดูสิ 1) 1000 - 777 = 2) 1000 - 283 = 3) 1000 - 505 = 4) 10,000 - 2345 = 5) 10,000 - 9876 = 6) 10,000 - 1011 = 7) 100 - 57 = 8) 1000 - 57 = 9) 10,000 - 321 = 10) 10,000 - 38 = 3,000 - 467 ก็ทำเหมือนกัน โดยลบตัวแรกสุดของ 3,000 ไป 1 จากนั้นก็ทำเหมือนเดิม จะได้ว่า 3,000 - 467 = 2,533 Tutorial 2 VERTICALLY AND CROSSWISE สำหรับตัวเลขที่น้อยกว่าฐานนิดหน่อย ลอง 88x98 88 น้อยกว่า 100 อยู่ 12 98 น้อยกว่า 100 อยู่ 2 12x2 = 24 88-2 หรือ 98-12 ได้ 86 ดังนั้นตอบ 8,624 ดูอีกตัวอย่าง หรือ ลองทำนี่ดู 1) 87 x 98 = 2) 88 x ...

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

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

รีวิว: Human Resource พนักงานใหม่โปรดรับไว้พิจารณา สปอยแหลก

a.k.a. ชนแม่งเลย หนังเป็น พี่เต๋อ ที่พร้อมจะหักมุมตลอดเวลา คาดเดาอะไรไม่ได้เลย หนังที่คิดว่าเป็นหนังคนทำงาน ดันมีฉาก เรท R มาเฉย ได้ข้อคิด แต่ไม่ได้ชอบมาก เพราะ ประเทศที่พัฒนาแล้วจะไม่มาคิดเรื่องพวกนี้เลยสักนิด  ถ้าตอนนี้ไปดูประเทศสหรัฐ (ที่กำลังบูมเรื่อง AI) ประเทศจีน (ตามมาติดๆ หรือนำไปแล้ว?) ประเทศ ไต้หวัน (ที่กำลังบูมเรื่อง เซมิคอนดักเตอร์) ประเทศเกาหลี (แซมซัง ก็ไล่มาติดๆ) ประเทศเวียดนาม (ที่ต่างชาติไปลงทุนมากๆ) จะไม่มีคำถามอะไรพวกนี้ในสมองเลย ลองไปฟังวิทยุช่องจีน ในเมืองที่เจริญๆ เมืองเศรษฐกิจ จะมีแต่ภาพ อนาคต ความหวัง ของใหม่ โรงงานใหม่ วิธีทำงานแบบใหม่ positive กว่ามาก ถ้ามัวแต่คิดเหมือนที่หนังปูในตอนแรก จะทำให้เรา ตกอยู่ใน loop นรก ซึ่งยิ่งคิดยิ่งแย่ แย่จนไม่คิดจะลงมือทำอะไรเลย เพราะจิตเป็นนายกายเป็นบ่าว สื่อ อย่าไปออกเรื่องไม่ดีมาก ออกเรื่องดีๆบ้าง เดี๋ยวคนในประเทศหวาดกลัวจนไม่กล้าทำอะไร ถึงตอนนั้นก็แย่ของจริง ตอนนี้คนประเทศอื่น ทำหนังลง Netflix กันเยอะนะครับ มีหนังใหม่ๆ ของประเทศอื่นเต็มไปหมด เช่น ฝรั่งเศส เยอรมัน สหรัฐ เกาหลี  บางอันก็ดัง บางอันก็ไม่รู้จัก 

อยู่เหงาๆ เราไปเที่ยว : สวนนงนุช พัทยา ( Nong NoochTropical Garden, Pattaya Thailand )

เอนทรีนี้เป็นส่วนหนึ่งของ serie ท่องเที่ยว ดูบทความท่องเที่ยว อื่นๆ ของผม ได้ที่  ลิงก์นี้  นะครับ วันนี้ ได้มีโอกาสไปเยี่ยมชม สวนนงนุช ซึ่งอยู่ไกลถึงพัทยาโน่น ซึ่งเรา วางแผน ไป-กลับ ภายในวันเดียว เป็น one day trip น่ะ อันที่จริง สวนนงนุช นี้ #เราเอง ได้ยินครั้งแรก จาก รายการพาเที่ยว รายการหนึ่ง ทางทีวี เห็นว่า เขาจัดสวนไว้ทั้งปี ไม่ต้องรอเทศกาล เหมือน งานพืชสวนโลก อันที่จริง พืชสวนโลก ก็น่าไปนะ เห็นตู้นอนของรถไฟ สวยดีเหมือนกัน ไว้ต้องหาโอกาสไปลองมั่ง การกลับมีขลุกๆ ขลักๆ เล็กน้อย เพราะว่า ทางเวปอื่นๆ ที่หาข้อมูลมา บอกแต่วิธีไป ไม่บอกวิธีกลับ ก็แบบ งง อ่ะ ว่า ไปไม่กลับกันเหรอ ตอนขากลับเลยทุลักทุเลไปนิด ดู วิธีเดินทาง กับค่าใช้จ่าย ได้จากล่างสุดของเอนทรี น้ะจ้ะ Stone Henge สวนสวยมากเลยแจ้ ที่ชอบก็คือ มี Sky Walk ทำให้มองเห็นภาพมุมสูงได้ด้วย แทนที่จะเป็นแค่ภาพมุมมนุษย์เดินดิน ทั่วๆไปที่ได้เห็นกัน ตอนแรกนั่ง สามล้อ เข้าไป แบบว่า งงๆ เพราะว่า เขาเก็บตังค์ตั้งแต่ Main Gate เลย หลังจากนั้น สามล้อ จะส่งเราที่ Pottery Garden แบบว่า เง็งเบย เพราะว่...

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

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

ลอง recovery file โดยใช้ ubuntu

จาก ที่ไปอ่านมา ลองเล่น photorec ดูดิ๊ $ sudo photorec จากนั้นมันก็จะเข้าสู่เมนูของมันซึ่งก็มั่วๆไปได้ มันใช้ไม่ยาก ผมขออนุญาตไม่เอา screenshot ของ shell มาให้ดูละกัน เนื่องจากไปดูของคนอื่นแล้วตกใจว่าต้องเลือกอะไรมากมาย แต่ยืนยันครับว่ามันใช้ง่ายจริงๆ พอมัน recovery เสร็จ ก็ไปอยู่ในโฟลเดอร์ที่สร้างไว้ แต่ติด permission The folder contents could not be displayed. You do not have the permissions necessary to view the contents of ... ก็เปลี่ยนเจ้าของมันซะเลย $ chown -R dsin recup_dir.1 # Give permissions as owner to user dsin. ส่วน ข้อเสียคือ ชื่อไฟล์ มันจะออกมาเป็น f ตามด้วยตัวเลข และที่เหมือนจะเหนือความคาดหมายคือ มันชื่อว่า photorec แต่มัน recover ไฟล์อื่นๆมาให้ด้วย เช่น mp3 mov mid gz zip แต่มันดันเปิดไม่ได้ซักกะอันน่ะสิ 55+ photorec ใช้ได้ทั้ง DOS, Windows, Linux, Sun Solaris, Mac OS X และที่สำคัญ ฟรี !!! ดูเพื่มเติมจาก หน้า official ของ photorec จริงๆ software พวก recovery มีอยู่มากมาย อันนี้คัดๆมาที่ใช้ฟรี ที่ใช้บน windows เช่น UndeletePlus Roadkil's Unstoppable Copier  ( มี sta...

[ SOLVED ] dell vostro 1310 laptop's keyboard not working when start ubuntu ( วิธีแก้ โน๊ตบุ๊ค DELL คีย์บอร์ดค้าง เมื่อเปิด อุบันตู )

My friends face this problem, so I think it's good to note it here. Just add "i8042.reset" to /boot/grub/menu.lst For example, kernel /boot/vmlinuz-2.6.28-13-generic root=UUID=45c7e398-1ba6-4315-81cc-4ec620618efa ro quiet splash i8042.reset ref : ubuntuforums