GoPiGo 小汽車︰朝向目標前進《六》

原本順著篇章,此時該介紹『Canny 邊緣檢測算子

Canny edge detector

The Canny edge detector is an edge detection operator that uses a multi-stage algorithm to detect a wide range of edges in images. It was developed by John F. Canny in 1986. Canny also produced a computational theory of edge detection explaining why the technique works.

Development of the Canny algorithm

Canny edge detection is a technique to extract useful structural information from different vision objects and dramatically reduce the amount of data to be processed. It has been widely applied in various computer vision systems. Canny has found that the requirements for the application of edge detection on diverse vision systems are relatively similar. Thus, an edge detection solution to address these requirements can be implemented in a wide range of situations. The general criteria for edge detection includes:

  1. Detection of edge with low error rate, which means that the detection should accurately catch as many edges shown in the image as possible
  2. The edge point detected from the operator should accurately localize on the center of the edge.
  3. A given edge in the image should only be marked once, and where possible, image noise should not create false edges.

To satisfy these requirements Canny used the calculus of variations – a technique which finds the function which optimizes a given functional. The optimal function in Canny’s detector is described by the sum of four exponential terms, but it can be approximated by the first derivative of a Gaussian.

Among the edge detection methods developed so far, Canny edge detection algorithm is one of the most strictly defined methods that provides good and reliable detection. Owing to its optimality to meet with the three criteria for edge detection and the simplicity of process for implementation, it became one of the most popular algorithms for edge detection.

The original image.

The Canny edge detector applied to a color photograph of a steam engine.

 

講點 OpenCV

Feature Detection

Canny

Finds edges in an image using the [Canny86] algorithm.

C++: void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false )
Python: cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) → edges
C: void cvCanny(const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 )
Parameters:
  • image – 8-bit input image.
  • edges – output edge map; single channels 8-bit image, which has the same size as image .
  • threshold1 – first threshold for the hysteresis procedure.
  • threshold2 – second threshold for the hysteresis procedure.
  • apertureSize – aperture size for the Sobel() operator.
  • L2gradient – a flag, indicating whether a more accurate L_2 norm =\sqrt{(dI/dx)^2 + (dI/dy)^2} should be used to calculate the image gradient magnitude ( L2gradient=true ), or whether the default L_1 norm =|dI/dx|+|dI/dy| is enough ( L2gradient=false ).

The function finds edges in the input image image and marks them in the output map edges using the Canny algorithm. The smallest value between threshold1 and threshold2 is used for edge linking. The largest value is used to find initial segments of strong edges. See http://en.wikipedia.org/wiki/Canny_edge_detector

Note

  • An example on using the canny edge detector can be found at opencv_source_code/samples/cpp/edge.cpp
  • (Python) An example on using the canny edge detector can be found at opencv_source_code/samples/python/edge.py

 

用法,朝向目標前進。或因近日『豪大雨』,惹人心神不寧,還是小汽車被雷打到?居然說︰它用『光流法』,追隨『木牛流馬』,閃電畫處一時不見牛馬蹤跡,無目的之漫蕩至『古柏』處

300px-GeraniumFlowerUnfurl2

古柏高士

唐‧杜甫古柏行

孔明廟前有老柏,柯如青銅根如石。
霜皮溜雨四十圍,黛色参天二千尺。
君臣已與時際會,樹木猶為人愛惜。
雲来氣接巫峽長,月出寒通雪山白。
憶昨路繞錦亭東,先主武侯同閟宫。
崔嵬枝干郊原古,窈窕丹青户牖空。
落落盤踞雖得地,冥冥孤高多烈風。
扶持自是神明力,正直原因造化功。
大厦如傾要梁棟,萬牛回首丘山重。
不露文章世已惊,未辭翦伐誰能送。
苦心豈免容螻蟻,香葉終經宿鸞鳳。
志士幽人莫怨嗟,古來材大難為用。

時光流影是能夠回頭的嗎?

─── 摘自《時間是什麼??

 

恰遇『參圓格物』的洛水『小神龜』︰

據說小海龜 『參圓格物』多時,終於發現『直達』 goto 和『轉向』 turn 的匯通處。由於言之未詳史無所載,此刻強為解說,難免生吞活剝也 。簡言之︰畫圓之理,『曲率』處處均一,故而重複進一步 forward 1 恆向 轉一度 right 1 【※ or left 1 】可以擬 ○ 矣。

─── 摘自《L4K ︰ Python Turtle《八》

 

告知以『大道務本』,否則勢必『失之豪釐,差以千里』︰

或許出於《周髀算經

「髀」,拼音:bì,注音:ㄅㄧˋ,也簡稱《周髀》,是中國古代一本數學專業書籍,在中國唐代收入《算經十書》,並為《十經》的第一部。

周髀的成書年代至今沒有統一的說法,有人認為是周公所作,也有人認為是在西漢末年寫成。

周髀算經》是中國歷史上最早的一部天文曆算著作,也是中國流傳至今最早的數學著作,是後世數學的源頭,其算術化傾向決定中國數學發展的性質,歷代數學家奉為經典。

周髀算經》《卷上》

昔者周公問於商高曰:「竊聞乎大夫善數也,請問古者包犧周天曆度。夫天不可階而升,地不可得尺寸而度。請問數安從出

商高曰:「數之法,出於圓方。圓出於方,方出於矩。矩出於九九八十一。故折矩,以為句廣三,股脩四,徑隅五。既方之外,半其一矩。環而共盤,得成三、四、五。兩矩共長二十有五,是謂積矩。故禹之所以治天下者,此數之所生也。

句股圓方圖:

句股圓方圖1

句股圓方圖2

周公曰:「大哉言數!請問用矩之道?」

商高曰:「平 矩以正繩,偃矩以望高,覆矩以測深,臥矩以知遠,環矩以為圓,合矩以為方。方屬地,圓屬天,天圓地方。方數為典,以方出圓。笠以寫天。天青黑,地黃赤。天 數之為笠也,青黑為表,丹黃為裏,以象天地之位。是故知地者智,知天者聖。智出於句,句出於矩。夫矩之於數,其裁制萬物,唯所為耳。周公曰:「善哉!」

昔 者榮方問於陳子,曰:「今者竊聞夫子之道。知日之高大,光之所照,一日所行,遠近之數,人所望見,四極之窮,列星之宿,天地之廣袤,夫子之道皆能知之。其 信有之乎?」陳子曰:「然。」榮方曰:「方雖不省,願夫子幸而說之。今若方者可教此道邪?」陳子曰:「然。此皆算術之所及。子之於算,足以知此矣。若誠累 思之。」

於是榮方歸而思之,數日不能得。復見陳子曰:「方思之不能得,敢請問之。」陳子曰:「思之未熟。此亦望遠起高之術,而子不能得,則 子之於數,未能通類。是智有所不及,而神有所窮。夫道術,言約而用愽者,智類之明。問一類而以萬事達者,謂之知道。今子所學,算數之術,是用智矣,而尚有 所難,是子之智類單。夫道術所以難通者,既學矣,患其不博。既博矣,患其不習。既習矣,患其不能知。故同術相學,同事相觀。此列士之愚智,賢不肖之所分。 是故能類以合類,此賢者業精習智之質也。夫學同業而不能入神者,此不肖無智而業不能精習。是故算不能精習,吾豈以道隱子哉?固復熟思之。」

榮 方復歸,思之,數日不能得。復見陳子曰:「方思之以精熟矣。智有所不及,而神有所窮,知不能得。願終請說之。」陳子曰:「復坐,吾語汝。」於是榮方復坐而 請。陳子說之曰:「夏至南萬六千里,冬至南十三萬五千里,日中立竿測影。此一者天道之數。周髀長八尺,夏至之日晷一尺六寸。髀者,股也。正晷者,句也。正 南千里,句一尺五寸。正北千里,句一尺七寸。日益表南,晷日益長。候句六尺,即取竹,空徑一寸,長八尺,捕影而視之,空正掩日,而日應空之孔。由此觀之, 率八十寸而得徑一寸。故以句為首,以髀為股。從髀至日下六萬里,而髀無影。從此以上至日,則八萬里。若求邪至日者,以日下為句,日高為股。句、股各自乘, 并而開方除之,得邪至日,從髀所旁至日所十萬里。以率率之,八十里得徑一里。十萬里得徑千二百五十里。故曰,日晷徑千二百五十里。」

日高圖

400px-Rigaotu1213CE

法曰:「周髀長八尺,句之損益寸千里。故曰:極者,天廣袤也。今立表高八尺以望極,其句一丈三寸。由此觀之,則從周北十萬三千里而至極下。」榮方曰:「周髀者何?」

陳 子曰:「古時天子治周,此數望之從周,故曰周髀。髀者,表也。日夏至南萬六千里,日冬至南十三萬五千里,日中無影。以此觀之,從南至夏至之日中十一萬九千 里。北至其夜半亦然。凡徑二十三萬八千里。此夏至日道之徑也,其周七十一萬四千里。從夏至之日中,至冬至之日中十一萬九千里。北至極下亦然。則從極南至冬 至之日中二十三萬八千里。從極北至其夜半亦然。凡徑四十七萬六千里。此冬至日道徑也,其周百四十二萬八千里。從春秋分之日中北至極下十七萬八千五百里。從 極下北至其夜半亦然。凡徑三十五萬七千里,周一百七萬一千里。故曰:月之道常緣宿,日道亦與宿正。南至夏至之日中,北至冬至之夜半,南至冬至之日中,北至 夏至之夜半,亦徑三十五萬七千里,周一百七萬一千里。

「春分之日夜分以至秋分之日夜分,極下常有日光。秋分之日夜分以至春分之日夜分,極下 常無日光。故春秋分之日夜分之時,日所照適至極,陰陽之分等也。冬至、夏至者,日道發歛之所生也至,晝夜長短之所極。春秋分者,陰陽之脩,晝夜之象。晝者 陽,夜者陰。春分以至秋分,晝之象。秋分至春分,夜之象。故春秋分之日中光之所照北極下,夜半日光之所照亦南至極。此日夜分之時也。故曰:日照四旁各十六 萬七千里。

「人望所見,遠近宜如日光所照。從周所望見北過極六萬四千里,南過冬至之日三萬二千里。夏至之日中,光南過冬至之日中光四萬八千 里,南過人所望見一萬六千里,北過周十五萬一千里,北過極四萬八千里。冬至之夜半日光南不至人所見七千里,不至極下七萬一千里。夏至之日中與夜半日光九萬 六千里過極相接。冬至之日中與夜半日光不相及十四萬二千里,不至極下七萬一千里。夏至之日正東西望,直周東西日下至周五萬九千五百九十八里半。冬至之日正 東西方不見日。以算求之,日下至周二十一萬四千五百五十七里半。凡此數者,日道之發歛。冬至、夏至,觀律之數,聽鐘之音。冬至晝,夏至夜。差數及,日光所 還觀之,四極徑八十一萬里,周二百四十三萬里。

「從周至南日照處三十萬二千里,周北至日照處五十萬八千里,東西各三十九萬一千六百八十三里 半。周在天中南十萬三千里,故東西矩中徑二萬六千六百三十二里有奇。周北五十萬八千里。冬至日十三萬五千里。冬至日道徑四十七萬六千里,周一百四十二萬八 千里。日光四極當周東西各三十九萬一千六百八十三里有奇。」

此方圓之法。

萬物周事而圓方用焉,大匠造制而規矩設焉,或毀方而為圓,或破圓而為方。方中為圓者謂之圓方,圓中為方者謂之方圓也。

七衡圖

400px-Qihengtu1213CE

凡為此圖,以丈為尺,以尺為寸,以寸為分,分一千里。凡用繒方八尺一寸。今用繒方四尺五分,分為二千里。

呂氏曰:「凡四海之內,東西二萬八千里,南北二萬六千里。」

凡 為日月運行之圓周,七衡周而六間,以當六月節。六月為百八十二日、八分日之五。故日夏至在東井極內衡,日冬至在牽牛極外衡也。衡復更終冬至。故曰:一歲三 百六十五日、四分日之一,一歲一內極,一外極。三十日、十六分日之七,月一外極,一內極。是故衡之間萬九千八百三十三里、三分里之一,即為百步。欲知次衡 徑,倍而增內衡之徑。二之以增內衡徑。次衡放此。

內一衡徑二十三萬八千里,周七十一萬四千里。分為三百六十五度、四分度之一,度得一千九百五十四里二百四十七步、千四百六十一分步之九百三十三。

次二衡徑二十七萬七千六百六十六里二百步,周八十三萬三千里。分里為度,度得二千二百八十里百八十八步、千四百六十一分步之千三百三十二。

次三衡徑三十一萬七千三百三十三里一百步,周九十五萬二千里。分為度,度得二千六百六里百三十步、千四百六十一分步之二百七十。

次四衡徑三十五萬七千里,周一百七萬一千里。分為度,度得二千九百三十二里七十一步、千四百一十分步之六百六十九。

次五衡徑三十九萬六千六百六十六里二百步,周一百一十九萬里。分為度,度得三千二百五十八里十二步、千四百六十一分步之千六十八。

次六衡徑四十三萬六千三百三十三里一百步,周一百三十萬九千里。分為度,度得三千五百八十三里二百五十四步、千四百六十一分步之六。

次七衡徑四十七萬六千里,周一百四十二萬八千里。分為度,得三千九百九里一百九十五步、千四百六十一分步之四百五。

其 次,日冬至所北照,過北衡十六萬七千里。為徑八十一萬里,周二百四十三萬里。分為三百六十五度四分度之一,度得六千六百五十二里二百九十三步、千四百六十 一分步之三百二十七。過此而往者,未之或知。或知者,或疑其可知,或疑其難知。此言上聖不學而知之。故冬至日晷丈三尺五寸,夏至日晷尺六寸。冬至日晷長, 夏至日晷短。日晷損益,寸差千里。故冬至、夏至之日,南北遊十一萬九千里,四極徑八十一萬里,周二百四十三萬里。分為度,度得六千六百五十二里二百九十三 步、千四百六十一分步之三百二十七。此度之相去也。

其南北游,日六百五十一里一百八十二步、一千四百六十一分步之七百九十八。

術曰:置十一萬九千里為實,以半歲一百八十二日、八分日之五為法,而通之,得九十五萬二千,為實。所得一千四百六十一為法,除之。實如法得一里。不滿法者,三之,如法得百步。不滿法者,十之,如法得十步。不滿法者,十之,如法得一步。不滿法者,以法命之。

的求『日高』之法,大概就是

失之豪釐,差以千里

的成因。

300px-海岛算经

四庫全書海島算經

220px-Sea_island_survey

如果用《海島算經

三國時代魏國數學家劉徽所著的測量學著作,原為《劉徽九章算術注》第九卷勾股章內容的延續和發展,名為《九章重差圖》,附於《劉徽九章算術注》 之後作為第十章。唐代將《重差》從《九章》分離出來,單獨成書,按第一題今有望海島」,取名為《海島算經》,是《算經十書》之一。

劉徽《海島算經》「使中國測量學達到登峰造極的地步」,使「中國在數學測量學的成就,超越西方約一千年」(美國數學家弗蘭克·斯委特茲語)

之圖來作『三角測量』的計算︰

\overline{GH} = D
\overline{BG} = X
\overline{AB} = H
 \angle AHB = \alpha
 \angle AGB = \beta

\tan(\alpha) = \frac{H}{D + X}
\tan(\beta) = \frac{H}{X}

Sea_Island_Measurement

可以得到

 H = D \cdot \tan(\alpha) \cdot \frac{1}{1 - \frac{\tan(\alpha)}{\tan(\beta)}}

然而『天很高,日很遠』,因此 \angle \beta \approx \angle \alpha ,故而很難『度量』的『精準』,一點點『角度』之『誤差』就產生了那個

失之豪釐,差以千里

的吧!!

─── 摘自《失之豪釐,差以千里!!《上》

 

何況縱會『直行』、『追跡』,且不知『轉向』、『感測』之法,未自主『行不得』也。還不快求『智慧』去。

小汽車言畢問到︰如何能得『智慧』?

當真

三更有夢書當枕,

午夜何因怕夢回。

怎曉已答之以勤『讀書』哩

Programming Computer Vision with Python

PCV – an open source Python module for computer vision


PCV is a pure Python library for computer vision based on the book “Programming Computer Vision with Python” by Jan Erik Solem.
Book coverAvailable from Amazon and O’Reilly.


The final pre-production draft of the book (as of March 18, 2012) is available under a Creative Commons license. Note that this version does not have the final copy edits and last minute fixes. If you like the book, consider supporting O’Reilly and me by purchasing the official version.

The final draft pdf is here.