如何快速、準確地數出一袋瓜子有多少顆?

現有的回答更多的針對給定數量的瓜子來數,對於另一種情況:從一袋瓜子中數出固定數量的瓜子並不完全適用。瓜子只是舉例,包括但不限於應用於其他形狀大致差不多的一類東西,比如豆子,花生,鑽石。


殺雞何需用牛刀,一台數碼相機+PhotoShop 就可以了。

1、將瓜子撒在淺色地面或淺色紙上,使其盡量分散開來;

2、數碼相機拍照拷入電腦並用PS打開。若對比度不高可調節「閾值」;

3、選擇魔棒工具 &> 點擊空白處 &> 反向,得到所有瓜子的選區。若圖片中含有少量雜質或接觸在一起的瓜子,可通過「選擇 &> 修改 &> 收縮」進行去除或分離;

4、選擇「分析 &> 選擇數據點 &> 自定」。在選區中,選擇「計數」並單擊「確定」;

5、選擇「窗口 &> 測量記錄」;

6、選擇「分析 &> 記錄測量」;

7、結果如下:

註:圖像處理過程可通過 「動作」 功能實現自動批處理以提高效率。


剛好手邊有一包瓜子,我嚴肅地看過,並試試數過。很負責人告訴你們,直接數最快。

為保證速度與準確,可以兩粒兩粒一起數。並對每50個以正字法標記一次。

絕對比第一名的答案,分揀、拍照、上傳相片、處理更快。即使數兩次驗證也比他快。

當然,我知道你們不喜歡我這個答案……


這事最適合用Mathematica來做了。

借用@北羽宮城的瓜子圖,直接拖進Mathematica,將圖片定義為pic,這段代碼可以選擇合適的Binarize的閾值:

Manipulate[
Show[pic,
Graphics[{Red, Thick,
Circle[#[[1]], #[[2]]] /@
ComponentMeasurements[
ImageMultiply[pic,
SelectComponents[Binarize[pic, {0, x}], "Area",
60 &< # &< 1500 ]], {"Centroid", "EquivalentDiskRadius"}][[All, 2]]}]], {x, 0, 1}]

運行,效果見下圖,發現閾值選擇0.8可以區分瓜子形態。

將Binarized的圖片存為bpic,再用ComponentMeasurement隨便找個屬性就行了:

bpic=SelectComponents[Binarize[pic, {0, .82}], "Area", 60 &< # &< 1500 ]; ComponentMeasurements[bpic, "Area"][[-1, 1]]

直接運行,結果:70。


看了上面一些答案,覺得都不太好,可操作性不強,我有一個簡單的辦法,應該在時間以及效率上都是可行的。

假設若干瓜子為一堆,兩手各從中撥出1顆,分左右放置,如此反覆操作,已最快速度將瓜子分為2堆,在這個過程中不必心算計數,以避免出現誤差的可能,分好之後,如有餘下1個則放置在所分出的那堆瓜子旁邊;然後再對分出來的其中一堆瓜子重複上述步驟,如此反覆,最終分成可目測個數的瓜子堆即可停止。接下來進行計算,計算公式為:最小堆瓜子數×2的n次方(n為分堆次數)+1×2的m次方(m為餘下瓜子所在層數-1)。

例如,分了5次,分出最小堆個數為8顆,第1次分堆餘數1顆,那麼總數就是8×2的5次方+1×2的0次方,等於257顆。如有多個餘數則需累加多次,如上面的例子改為第1次和第4次分堆都有餘數,那麼總數是8×2的5次方+1×2的0次方+1×2的3次方=265顆。

左右手同時分算1次,總共分瓜子240次,按1秒可操作3至4次計算,90秒左右即可完成,加上計算用時,總用時也不會超過3分鐘。有人會說,一顆一顆數用時也差不多啊,其實分析一下就可以知道,邊分邊計數是容易產生誤差的,我們追求的任何人都能輕鬆操作並且無誤差,所以分堆統計是綜合效率及準確率的最佳計數方法。

PS:原來的公式有漏洞,經網友提醒,現更改了演算法,雖然比之前的方法稍麻煩,但依然有可行性。


1、把袋口束緊至單顆瓜子能掉出的最小直徑。

2、找一張硬紙殼/塑料板/鋁鍋蓋,反正是敲擊能發出響聲且無迴響的板狀物,45°傾斜放置。

3、打開Windows收音機,採樣率和音質都調到最高,開始錄製。

4、把瓜子袋倒置晃動,讓瓜子均勻地敲打在硬紙殼上發出聲響(由於之前束緊袋口,同一時間只會有一個瓜子掉出),直至倒完為止。

5、Windows錄音機停止錄製,保存波形文件,寫個簡單的程序統計波峰數(振幅大於某值),Over。

豆子、花生、人頭等同理。

提供一下統計波峰的簡單程序演算法,供參考。

Microsoft WAVE soundfile format

參見這個,代碼不難寫, 要手動設定幾個參數

a:區分是否為瓜子敲擊聲響的振幅閾值(必選)

b:最小無聲時間(可選)

c:最小有聲時間(可選)

d:最大有聲時間(可選)

臨時變數:t=當前塊持續時間

然後根據下面的規則,逐塊讀數據:

1、若此塊的振幅大於a,則認為是無聲,否則是有聲。一段連續的有聲塊記為一次敲擊。

理想條件下可套用上面的模型,但如果條件不夠理想,還需再加上以下規則:

2、如果一段連續無聲時間長度大於b,則確認為無聲塊,否則丟棄

3、如果一段連續有聲時間長度大於c且小於d,則確認為有聲塊,否則:

3、1、如果長度小於c,丟棄

3、2、如果長度大於d,可以記作1~d/c個有聲塊,看情況處理

如果出現丟棄或是3、2的情況,說明工具不夠理想,或者是手動設定的參數精度不夠,還需要繼續優化。


使用這種機器瓜子包裝機,瓜子自動包裝機--河南鄭州星火包裝機械有限公司

參數設置到底線,一次一包只能封一粒瓜子.封包可以極小的,郵票那麼大吧.

然後看看封包數(機器有顯示)扣掉空袋數(機器有自檢)

或者用這個:多功能包裝機-點數包裝機,計數包裝機,五金包裝機,螺絲包裝機

這個是點螺絲或者五金電料啥用的.考慮到瓜子的體積形狀,應該也可以湊合用.這個是計數包裝機,比上面那個還好.當然,也更貴.

你捨得花錢就行.

樓上的都是家庭型技術宅.應該進工廠見識下.


好弱,一點也木有天朝風範, 正確做法如下

找一個班級,把瓜子丟給班長 團支書 課代表 神馬滴:

留好課堂作業,把一袋瓜子分為 若干份, 讓每個學生數自己的數量 , 然後 求和就是了

我大天朝不缺的就是人~~~ 絕對高級智能 快速

想當初 三體的 人列計算機也不過如此


這個問題好有趣!

這些答案里我最喜歡的是@北羽宮城 用圖像處理和識別的方法,相信應該得到不錯的準確率。答案中有人提到用統計學來處理,雖然方法不對,但是思路是好的。我想繼續從這個角度入手。

先做簡單的假設:1)假設一袋瓜子大約有200粒;2)瓜子的重量比較均勻(這個假設不用太苛刻)。

  • 步驟1,先對所有瓜子進行稱重,記錄中重量為Wtot;
  • 步驟2,隨機抽5粒瓜子進行稱重,計算平均重量,並記錄為w1;
  • 步驟3,重複步驟2, N次(N &> 20),記錄下每次的平均wn, (n = 1, 2, ...N);
  • 步驟4,計算N次平均重量的平均值和均方差,分別記為Wavg和SEM;
  • 步驟5,用總重量Wtot除以Wavg,估算瓜子總數 A (注意這裡得到的只是一個估值)。真實值有95%的概率位於區間 [A - 1.96 * SEM, A + 1.96 * SEM] 內。所以SEM越小,估值就越有可能接近真實值。

跟人工計數和圖像識別的方法相比,在處理一袋瓜子的問題上,統計學的方法不是效率最高的,並且得到的結果也只是概率區間。但是統計學的優點在於可以根據精度需求,調節採樣數量和試驗重複次數,在處理大量數據時,優勢會更加明顯。我估計隨著樣本增大,人工計數和圖像識別的複雜度會越來越高,出錯概率會增加。

拋磚引玉,歡迎討論!


一、找一塊平的
方形泡沫板 ,根據瓜子數量多少,如有一麻袋,則要大點的板。

二、點一根煙或香,把板燙出小窩成正方眼陣列(如10*10、20*20、20*50或100*100甚至1000*1000,根據需要),每個窩的大小以比瓜子剛大一點為標準,絕大部分瓜子能落入1個而不能同時落入2個。

三、找一個掃把或大刷子,準備紙筆做記錄,抓一把你的那袋瓜子到陣列板上,開刷,然後整理使每個窩有且只有一個瓜子。刷一把記個「正」字的一筆,並把刷過的瓜子放到另一邊,一直刷到最後一次瓜子不能放滿(或恰巧無剩餘)為止。之後數「正」字多少和餘數,計算之。

四、如瓜子數量很大,基本板眼數較多,可分別做4*5、10*10、20*25、100*100、----等幾個不同量級的板,便於最後數餘數。


我覺得可以靠鴨子來做分散式計算,因為鴨子一次只能吃一顆瓜子[1][2]。

然後我們可以在鴨子的嘴下方裝一個感測器,碰到地面會+1,然後同時利用兩次碰到地面的時間,考慮到鴨子可能要好多秒才能吃掉一顆瓜子,所以可以濾掉一些不正確的觸碰。

然後你就放一百隻鴨子,然後把瓜子往地上一撒,然後呱呱呱他們就幫你數出來了。

但要注意,要給鴨子喝水,否則他們吃多了瓜子會很渴。並濾掉喝水的觸碰計數。

同理,你換成鴿子也可以,鵝也可以,或者換成100個人,花點錢讓他們嗑瓜子的時候幫你數。既然要快速,就只能「空間換時間」了。

[1] 鴨子會吃掉瓜子嗎?

[2] 我的第一隻寵物就是一隻鴨子,他青春期之後特別喜歡吃瓜子

以及,@SinanLEe 提到的想法非常好,恰巧我曾經在本科期間做過一個用圖像識別技術來數綠葉上的蟲子,蟲子的顏色比瓜子還平均,但做下來效果精度不太理想。現實世界中的數據複雜太多了。具體步驟如下圖,具體論文請點擊該鏈接(https://dl.dropboxusercontent.com/u/12897356/%E5%9F%BA%E4%BA%8E%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E7%9A%84%E5%8F%B6%E7%89%87%E5%AE%B3%E8%99%AB%E8%AE%A1%E6%95%B0.pdf):

印象中圖像處理領域有數人頭的演算法,會考慮到了人的輪廓特徵等高級的演算法。比較複雜。

------

再次擴展一下,如果結合圖像處理技術和人工分散式計算,可以對平鋪開來的瓜子拍一張大照片,然後用圖像分割演算法把大圖片分割成獨立的(即一個瓜子被截斷出現在兩張圖片上),然後讓人去數。

如何快速的讓一大幫人幫你干這麼無聊的事呢?一個方法是做成驗證碼,就像Google利用驗證碼做OCR(圖像字元識別)一樣。另一方法可以放到Amazon MTurk上面,是一個招工平台,可以迅速把自己的任務分派出去並自動匯總。


我搜索了下,發現一個軟體ImageJ http://rsb.info.nih.gov/ij/download/win32/ij147-jdk6-64bit-setup.exe

自帶java環境。也有無java版本,也在上面網址能下載到。

ps,這個軟體完全免費,多平台。很不錯。

打開軟體是這樣的界面

選擇目前排名第一的那點陣圖片

再將rgb圖片改為32bit,或者更小的8bit

最後將圖片binary一下

這時候圖片就可以分析了

將大小可以設定下,只取多少像素之間的,我選擇是100到無限大

這時候就能出結果了

最後結果70個。


邊吃邊數...


一個笨辦法,不需要電腦軟體或者數學計算,但首先需要有一些工具:

1. 白色燈箱一塊,類似用來看相機膠片那種,如圖,需平放:

2. 準備幾種規格的類似於篩子的槽,留出比如10x10=100個,以人工能方便計數為準,每個槽位的尺寸和深度不能容納1顆以上的瓜子,並在每個槽位底部開一個針眼大小的小孔,能透光即可,下圖盡供示意,密集恐懼者勿視。

然後呢,把槽放在光板上,把瓜子隨意傾倒在槽上,人工用刷子把槽上多出來的瓜子掃去回收,確保每個槽內只有一顆瓜子。接下來肉眼檢查槽中是否有漏光,如果沒有就是100個,反之減去光點數量,即可快速數出這批瓜子的數量,如此反覆這個過程,直到數完。


用機器是可以準確測出瓜子的數量的,半體導行業能夠測試比米粒還小的原件。將瓜子置於類似於電飯鍋(當然要比它大很多倍)的機器里,從底部向上會延伸像盤山公路似的軌道,越往上越窄。機器里有震動電機,打開後,瓜子就能夠從底部沿軌道一顆接一顆的盤旋而上了,在出口處安裝計數器。


為什麼沒有人想到標誌重捕法?!

隨機抽出一個數目的瓜子,比如50個,坐上標記。放回。均勻攪拌。然後抽出n個瓜子,數數有幾個帶標記的,記做m。那麼總共就有(n/m)×50


看過數碼相機+photoshop的方案,發現用數碼相機+flash其實也可以輕鬆做到:

還借用這張照片:

1) 把照片導入flash。菜單選擇 Modify - Bitmap - Trace Bitmap...

這時會彈出一個對話框,保持默認設置,點OK

2) 然後我們得到一張矢量化的圖片:在單色背景上單擊滑鼠選中,然後點delete鍵。

我們得到了沒有背景的,分散的矢量瓜子:

3) command+A (windows系統 Ctrl+A)全部選中,然後點右鍵,選擇 Distribute to Layers

4)看看一共有多少層,然後減1就可以了

這裡是71層,所以答案是70顆瓜子。

為什麼要減1呢?

因為原來導入照片的Layer 1現在已經是空著的了。最後,能拍出一張背景如此乾淨整潔,瓜子粒粒分開的照片才是最難的步驟!


瞎扯淡的回答還是挺多的~

我們做QC和化驗一般是用容重儀來測,不知道這種神器的請自己搜索,

樣式很多,我化驗室用的是這種。

一般來說均勻度比較高的顆粒物料都可以用這種方法測。

圖片在網上隨便找的,給大家大致演示一下。

我說的瞎扯淡在這裡特指脫離實際,沒有人蔘公雞的意思。望各位親愛的乎友知悉。


靠眼力估算。

上世紀90年代中期,賭片盛行,其中最火的一部亞視電視劇叫【勝者為王】,陳庭威,萬綺雯,秦沛,呂頌賢,張家輝,曾華倩主演。陳庭威扮演的石志康出身市井,機緣巧合下邂逅獨臂賭王方真,從此進入賭壇,憑藉努力與天賦,從賭場的打雜小弟做起,一直成為一代賭王。

該劇的第二部【天下無敵】中,石志康在澳門大三巴牌坊前遇到已經瘋掉的前代賭王聶萬龍,聶萬龍將一個賣玩具球的推車掀翻,二人憑眼力計算滾落的玩具球的數量,聶萬龍因一球之差落敗(其實沒輸。

劇中還有賭珍珠的段子,也是將一盤珍珠端出,單憑眼力估算珍珠數量的範圍,誤差不超過50顆!

雖然是電視劇,但這種神技對我幼小的心靈造成極大的震撼!當然,好多事的不是你想做就可以做的!

於是劇中給出此種賭術的練習方法!!!

1.張家輝對著一張報紙,放到可見的範圍內,然後逐漸將報紙距離放遠,直到能距離兩米之外還能看到報紙上的小字,

2.石志康將一把綠豆灑在地上,掃視一眼,報數,然後用竹籌五五分開,計算總數,由少到多,速度也越來越快,最後單靠耳力就能出數。

當時看過此劇之後,幾乎所有的男生都開始練習,每人兜里都裝著一些綠豆黃豆黑豆之類的,最差就用瓜子。一下課就聚在一堆撒一把開始互猜,起先都是蒙,但後來發覺真的可以算到八九不離十,個人的最好成績是100粒左右,誤差在5粒之內。

您別不信,當時除了猜豆子,我還跟幾個小夥伴自學了單手切牌,牌九規則,以及偷牌出千。直到現在右手拋一個骰子,還能做到要什麼數開什麼數。


對於會天文觀測的人:

拍照,圖像灰度化後反轉

source extractor

調節參數至chechfits裡面只有瓜子邊緣有圈。

看看輸出有多少行


應該用數理統計的方法,抓取一定數量樣本,稱每顆瓜子的重量,找到重量的分布概率,得到重量的期望。然後整體稱重,除以期望就是瓜子數了


推薦閱讀:

TAG:方法 | 創新思維 |