• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Android的手機(jī)攝影測量軟件設(shè)計與實(shí)現(xiàn)

      2019-09-28 01:25:18劉桃麗林心梅
      關(guān)鍵詞:待測物物件像素點(diǎn)

      劉桃麗,林心梅

      (廣東海洋大學(xué) 數(shù)學(xué)與計算機(jī)學(xué)院,廣東 湛江 524008)

      0 引 言

      對于生活中各種物體的測量,目前多采用傳統(tǒng)的測量方法。即對于小型且形狀較規(guī)則物體的測量,一般使用各種測量工具如直尺、卡尺和卷尺等,但是對于體積較大或不規(guī)則的物體,其長度、高度以及兩者間的距離等數(shù)據(jù)的測量則需要采用專業(yè)的測繪設(shè)備來進(jìn)行。此類測量對測量操作人員、測量儀器以及測量的場地都有很高的要求,這就給一些實(shí)時要求測量的情況帶來了很大的不便[1]。如何便利地對物體的各種數(shù)據(jù)進(jìn)行測量,成為一個亟待解決的問題。

      隨著科學(xué)技術(shù)的飛速發(fā)展,移動設(shè)備的性能和功能變得越來越強(qiáng)大。目前,手機(jī)、平板的移動終端已經(jīng)成為人們生活中不可或缺的設(shè)備。在Android平臺上,各大軟件市場上的App琳瑯滿目,眾多實(shí)用的軟件給人們的生活和工作帶來了極大的便利[1]。基于此,文中設(shè)計了一款基于Android平臺的手機(jī)測量軟件App。該App利用手機(jī)自帶的相機(jī)功能拍攝得到的物體照片,經(jīng)過App后臺相應(yīng)的處理,直接得出待測物的長度或是待測物與手機(jī)的距離。通過使用該軟件,用戶可以較為方便地測量出待測物的長度或者是待測物與手機(jī)的距離,實(shí)驗結(jié)果表明測量結(jié)果誤差較低,可以滿足生活中各種物體的參數(shù)測量的要求。

      1 軟件功能

      該軟件的測量方法,是將待測物體通過手機(jī)攝像頭進(jìn)行拍攝,然后對得到的照片進(jìn)行相應(yīng)處理,從而得到需要的數(shù)據(jù)。軟件功能主要分為三部分:第一,測量待測物體的長、高、寬等參數(shù);第二,測量被測物體與手機(jī)之間的距離;第三,在手機(jī)上等比例繪制直尺。此外,軟件還提供將測量結(jié)果保存到本地的功能,用戶可以對這些測量結(jié)果進(jìn)行查看和刪除操作。軟件功能模塊如圖1所示。

      圖1 測量軟件功能模塊

      1.1 測量照片上待測物長度

      在該模塊中,其測量功能操作過程如下:用戶將待測物和長度已知的參考物放置在同一平面,然后使用手機(jī)的相機(jī)正對參考物和待測物拍攝,要求參考物和待測物要全部落在照片內(nèi)。在測量軟件中打開拍攝的照片,然后在照片上選取參考物的起點(diǎn)和終點(diǎn),并輸入?yún)⒖嘉锏拈L度,然后選取待測物的起點(diǎn)和終點(diǎn)并按下獲取結(jié)果按鈕即可得到軟件的計算結(jié)果。一般而言,參考物的長度與待測物的長度越接近,測量結(jié)果越準(zhǔn)確[2]。

      1.2 測量照片上待測物與手機(jī)的距離

      使用該功能前需要先設(shè)置參考值數(shù)據(jù)。設(shè)置參考值操作過程如下:首先找到一個長度已知的參考物,然后使用手機(jī)相機(jī)在一定的已知距離正對該參考物進(jìn)行拍攝,在軟件中打開該照片后選取該參考物的起點(diǎn)和終點(diǎn)即整個參考物的長度,并點(diǎn)擊錄入?yún)⒖贾蛋粹o,在彈框中輸入?yún)⒖嘉镩L度和手機(jī)與該參考物的距離并保存。參考值可以錄入多個,并且建議錄入不同長度和距離的參考值,這有助于降低系統(tǒng)誤差。

      參考值錄入后就可以使用該功能進(jìn)行距離測量,與錄入?yún)⒖贾档牟襟E相似,用戶在軟件中打開待測物的照片后選取待測物的起點(diǎn)和終點(diǎn),然后點(diǎn)擊參數(shù)設(shè)置按鈕,在彈框上輸入待測物長度點(diǎn)擊確認(rèn),再點(diǎn)擊獲取結(jié)果按鈕即可得到軟件計算出的距離值。在這里要說明的是,如果點(diǎn)擊參數(shù)設(shè)置按鈕后輸入的不是待測物的長度而是待測物與手機(jī)的距離,那么軟件會計算出待測物的長度。

      1.3 在屏幕上繪制等比例直尺

      軟件在手機(jī)屏幕上等比例繪制直尺與大部分直尺一樣,繪制的直尺包括毫米刻度、厘米刻度和數(shù)字。用戶打開該界面后,手機(jī)就可以當(dāng)作是一把直尺去測量待測物。繪制得到的尺子的長度受限于屏幕尺寸,一般而言,5英寸的手機(jī)可以繪制出11厘米的尺子。

      2 測量原理與算法

      2.1 測量照片上待測物長度的原理

      將待測物和參考物(長度已知的物件)放置在同一平面,然后使用手機(jī)攝像頭正對兩物件拍攝。同時,待測物與參考物要盡可能出現(xiàn)在圖片中間,避免在邊緣出現(xiàn),這是因為攝像機(jī)的鏡頭畸變會導(dǎo)致圖片邊緣失真[3]。記待測物的起點(diǎn)和終點(diǎn)的像素點(diǎn)數(shù)為p1,待測物的長度為l1;參考物的起點(diǎn)和終點(diǎn)的像素點(diǎn)數(shù)為p2,物理長度為l2,顯然這些參數(shù)符合下式:

      (1)

      所以:

      (2)

      2.2 測量照片上待測物與手機(jī)距離的原理

      透鏡成像的原理如圖2所示,其中u是指物體到鏡頭的距離,簡稱物距;v是指成像到鏡頭的距離,簡稱像距;h是物體的高度;p是成像的高度;f是鏡頭的焦距。

      圖2 凸透鏡成像原理

      根據(jù)圖2以及三角形相似的特性,可以得出:

      (3)

      根據(jù)幾何光學(xué)的透鏡成像公式[4]:

      (4)

      其中,u是物距;v是像距;f是焦距。

      由上述兩個等式可以推出:

      (5)

      由于手機(jī)攝像頭的焦距f一般小于10 mm,而且測量距離功能的測量范圍大于10 cm,對測量結(jié)果影響很小,所以可以將焦距f省略,故式(5)可以看作是:

      (6)

      根據(jù)式6可知,只要知道相機(jī)的焦距f、待測物的高度h以及待測物在成像處的高度p就能計算出手機(jī)到待測物的距離[5]。但是因為手機(jī)攝像頭拍攝時成像于感光元件,物體成像的高度或者長度難以測量。

      2.3 測量照片上待測物與手機(jī)距離的參考值

      對物件成像高度難以測量的問題,可以通過引入?yún)⒖贾岛蛯⒊上窀叨鹊刃мD(zhuǎn)換成另一個量值來解決。

      在同一個手機(jī)攝像頭中,焦距是固定的,也就是f可以看作是一個常量。如果使用該攝像頭分別對物件1和物件2正面拍攝,那么根據(jù)式6可得到以下等式:

      (7)

      對等式7變換得到:

      (8)

      顯然,相比式6,通過式8計算物件與手機(jī)的距離不再需要具體成像高度值p,而只需得到物件2和物件1的成像高度之比[6]。

      對于同一個攝像頭,如果將其拍攝的成像按相同方法加載到同一屏幕上,那么屏幕上物件2與物件1的長度之比必定等于物件2和物件1的成像高度之比。在這里可以進(jìn)一步得到,在屏幕上物件2的起點(diǎn)和終點(diǎn)間的屏幕像素點(diǎn)與物件1的起點(diǎn)和終點(diǎn)間的屏幕像素點(diǎn)之比,也必定等于物件2和物件1的成像高度之比。所以,對于物件的成像高度值p可以用物件在屏幕上的像素點(diǎn)來等效表示,前提是所有的圖片要使用相同的加載方式加載到屏幕上。

      所以根據(jù)式8來計算圖片上待測物與手機(jī)的距離,需要用戶提供屏幕上待測物起點(diǎn)與終點(diǎn)的像素點(diǎn)數(shù)、待測物的長度以及參考物的數(shù)值。參考物的數(shù)值包括在屏幕上起點(diǎn)與終點(diǎn)間的像素點(diǎn)數(shù)、參考物的長度以及參考物與手機(jī)的距離。

      此外,根據(jù)式7還可以推出:

      (9)

      所以當(dāng)用戶輸入待測物到手機(jī)的距離時,軟件還能根據(jù)式9計算出待測物的高度或者長度。

      要注意的是,部分手機(jī)相機(jī)可以拍攝不同長寬比的照片,例如4∶3或者16∶9。在設(shè)置參考值時和測量時必須使用同等長寬比的照片。

      3 降低測量待測物與手機(jī)的距離的誤差

      在使用測量照片上待測物與手機(jī)距離功能時需要先設(shè)置參考值,并且往往需要設(shè)置多個參考值。

      設(shè)置參考值的步驟包括:第一步,使用手機(jī)正對參考物拍攝;第二步,在屏幕上選取參考物的起點(diǎn)和終點(diǎn);第三步,設(shè)置參考物的長度和與手機(jī)的距離。在這些步驟中,第一步可能出現(xiàn)沒有正對參考物的問題,第二步可能出現(xiàn)選取參考物的起點(diǎn)或終點(diǎn)有偏離的問題,第三步可能出現(xiàn)輸入的參考物的長度和與手機(jī)的距離存在較大誤差的問題。所以每個參考值都可能存在較大誤差,從而導(dǎo)致測量結(jié)果產(chǎn)生較大誤差。因此建議設(shè)置多個參考值,使得軟件可以結(jié)合多個參考值進(jìn)行計算,降低單個參考值對測量結(jié)果的影響。

      算法流程如圖3所示。

      4 軟件實(shí)現(xiàn)

      Android Studio是基于流行的IntelliJ IDEA創(chuàng)建的一套用于Android開發(fā)的免費(fèi)集成開發(fā)工具,目前已成為Google官方指定的Android開發(fā)平臺[7]。故軟件使用Android Studio2.3作為開發(fā)平臺,使用Java語言進(jìn)行實(shí)現(xiàn),將數(shù)據(jù)存儲到Android自帶的SQLite數(shù)據(jù)庫中保存。

      測量照片上待測物長度功能包括打開照片、選取參考物起點(diǎn)和終點(diǎn)、設(shè)置參考物長度、獲取結(jié)果等步驟。與之相似的是測量照片上的待測物與手機(jī)距離功能包括打開照片、選取物件起點(diǎn)和終點(diǎn)、設(shè)置待測物長度或距離、設(shè)置參考值、獲取結(jié)果等步驟。在這些步驟中,打開照片和選取物件起點(diǎn)和終點(diǎn)是關(guān)鍵功能。

      4.1 繪制直尺

      在屏幕上繪制直尺就是在屏幕上按一定的間距繪制刻度與文字。其中,確定間距是待解決的關(guān)鍵問題,直尺的單位長度為1 mm,所以如何在屏幕上表示1 mm就是解決問題的關(guān)鍵。

      圖3 計算距離值流程

      在安卓開發(fā)中,可以通過Canvas類來繪制圖像與文字[8]。Canvas類繪制圖像時會使用屏幕的坐標(biāo)系,這個坐標(biāo)系以屏幕左上方為原點(diǎn),從左往右是X軸正方向,從下往上是Y軸正方向,坐標(biāo)的單位長度就是一個屏幕像素點(diǎn)。

      屏幕密度是指單位長度上能顯示的屏幕像素點(diǎn)數(shù),也就是一英寸上能顯示的像素點(diǎn)數(shù),用符號dpi表示[9]。于是,根據(jù)屏幕密度就能換算成坐標(biāo)系與物理尺寸的關(guān)系,從而解決在屏幕上表示1 mm的問題。

      屏幕密度可以通過調(diào)用系統(tǒng)提供的dpi獲得,而且可細(xì)分為X軸的屏幕密度與Y軸的屏幕密度。軟件在較長的一側(cè)繪制直尺,所以選取Y軸作為直尺方向。得到Y(jié)軸的屏幕密度后,根據(jù)以下等式就能求出屏幕上1 mm能顯示的像素點(diǎn)數(shù)(dpm):

      dpm=dpi/25.4

      (10)

      其中,1英寸等于25.4 mm。

      4.2 打開照片

      在軟件中打開系統(tǒng)相冊中的照片,主要是通過以下步驟:調(diào)用startActivityForResult(Intent intent,int requestCode)打開系統(tǒng)相冊;選中照片后系統(tǒng)會調(diào)用onActivityResult(int requestCode,int resultCode,Intent data),從Intent data中可以解析出選中照片的Uri。

      4.2.2 顯示照片

      得到照片的地址后,就可以通過BitmapFactory.decodeFile(String pathName,Options opts)將圖片加載到內(nèi)存,然后放到ImageView上。

      在將圖片加載到內(nèi)存時,需要先經(jīng)過壓縮處理,否則會因為內(nèi)存消耗較大導(dǎo)致軟件崩潰??梢酝ㄟ^構(gòu)建BitmapFactory.Options實(shí)例來設(shè)置縮放的倍數(shù)[10]。

      此外,更為重要的是,分辨率相同的照片,長寬比可能不同。例如一張1 200萬像素的照片,有可能是4 000×3 000的,也有可能是3 000×4 000的。這就導(dǎo)致如果直接將圖片加載到屏幕上,有可能是橫屏顯示,也有可能是豎屏顯示。

      在測量照片上待測物與手機(jī)距離原理中提過,使用式8計算距離時不需要具體的成像高度,而是只需得到參考物的成像高度與待測物的成像高度之比。

      將這些照片按同樣的方式加載到屏幕上時,可以看成是在同一個底片上的成像。于是,參考物的成像高度與待測物的成像高度之比就等價于參考物的起點(diǎn)和終點(diǎn)在屏幕上的像素點(diǎn)數(shù)與待測物的起點(diǎn)和終點(diǎn)在屏幕上的像素點(diǎn)數(shù)之比。

      所以在顯示圖片時,需要統(tǒng)一將圖片設(shè)置為豎屏顯示或者橫屏顯示。因為豎屏顯示的圖像面積更大,所以使用豎屏顯示。為確保所有圖片都是豎屏顯示,可以先判斷圖片的分辨率是否是長大于寬,如果是那么就使用Matrix.postRotate(90)將圖片旋轉(zhuǎn)90度再顯示圖片,否則直接顯示圖片。

      圖7為圖6所示的金鍍膜光纖在諧振響應(yīng)波長1.55 μm處的基模模場分布圖.從圖7(b)可知,在波長1.55 μm處,光纖y偏振纖芯模式與y偏振二階表面等離子模式具有相同的模式傳播常數(shù),光纖纖芯模式強(qiáng)烈的耦合到金屬表面產(chǎn)生的SPPs模式中,產(chǎn)生了表面等離子共振效應(yīng),而圖7(a)顯示的x偏振方向光纖基模模場能量被全部限制在纖芯中.光纖的這種特性可以很好地將其應(yīng)用于通信波段的光纖偏振濾波器中.

      4.2.3 Android權(quán)限設(shè)置

      訪問系統(tǒng)中的照片需要先獲得訪問外部存儲的權(quán)限[11]??梢栽贏ndroidManifest.xml中申請這些權(quán)限,代碼如下:

      android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

      android:name="android.permission.READ_EXTERNAL_STORAGE"/>

      在Android6.0以后,上面的兩個權(quán)限僅在AndroidManifest中申請是不夠的,還需要通過在代碼中動態(tài)申請[12],代碼如下:

      ActivityCompat.requestPermissions(TakePhotoActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PERMISSION_REQ_WRITE_EXTERNAL_STORAGE);

      4.3 物件選取

      物件選取是指標(biāo)識屏幕顯示的照片上物件的起點(diǎn)和終點(diǎn)。該功能通過在屏幕上放置兩個點(diǎn)來表示物件的起點(diǎn)和終點(diǎn),并且可以返回這兩個點(diǎn)在屏幕上的連線的像素點(diǎn)數(shù)。圖4是在手機(jī)上截取物件起點(diǎn)和終點(diǎn)的截圖,圖4中上面所選取的點(diǎn),在屏幕上方的圓圈中可以進(jìn)行放大,以降低取點(diǎn)的誤差。

      圖4 物件選取示意

      在Android開發(fā)中,可以通過自定義組件來完成這個功能[13]。圖4中的4個圓環(huán)以及它們之間的連線就是實(shí)現(xiàn)物件選取功能的自定義組件MeasureView。該組件由4個圓環(huán)(分別稱為A環(huán)、B環(huán)、C環(huán)、D環(huán))和3條連接線(A環(huán)與B環(huán)圓心之間的連線、B環(huán)與C環(huán)圓心之間的連線、C環(huán)與D環(huán)圓心之間的連線)組成,其中BC連線屬于核心線,AB連線和CD連線屬于輔助線。用戶可以移動4個圓環(huán),當(dāng)移動B環(huán)或者C環(huán)時,只有B環(huán)或者C環(huán)被移動。當(dāng)移動A環(huán)時,B環(huán)會隨之移動;當(dāng)移動D環(huán)時,C環(huán)也會隨之移動。將B環(huán)和C環(huán)分別移動到物件起點(diǎn)和終點(diǎn),通過調(diào)用測量組件的int getCoreLinePixel()方法就能獲取B環(huán)圓心到C環(huán)圓心連線的像素點(diǎn)數(shù),這個像素點(diǎn)數(shù)值就是選取物件的屏幕上的像素點(diǎn)數(shù)值。

      在測試過程中發(fā)現(xiàn),對于一些較小的物件,MeasureView在選擇起點(diǎn)和終點(diǎn)時顯得有些困難,因為難以發(fā)現(xiàn)起點(diǎn)或終點(diǎn)是否選取得當(dāng),放對了位置。為了解決這個問題,實(shí)現(xiàn)了放大鏡組件ZoomView。ZoomView的外觀設(shè)計成一個圓,里面可以顯示圖像。將B環(huán)和C環(huán)分別綁定一個ZoomView,這樣就能看清B環(huán)的中心和C環(huán)的中心在圖片上的具體位置,從而更好地選取物件。

      4.4 數(shù)據(jù)庫的設(shè)計

      測量結(jié)果和參考值數(shù)據(jù)都是保存到本地的。在Android中提供3種數(shù)據(jù)持久化技術(shù),分別是文件存儲、SharedPreference存儲和數(shù)據(jù)庫存儲[14]。在這里使用適合保存大量數(shù)據(jù)的數(shù)據(jù)庫存儲,也就是Android自帶的SQLite數(shù)據(jù)庫存儲。

      數(shù)據(jù)庫一共有2個表,分別是保存測量圖片上待測物長度的實(shí)體(在這里稱它為長度記錄)和保存測量圖片上待測物與手機(jī)距離的實(shí)體(在這里稱它為距離記錄)。長度記錄結(jié)構(gòu)如下:(編號、名稱、參考物長度、參考物像素、測量物長度、測量物像素、圖片地址、創(chuàng)建時間戳);距離記錄結(jié)構(gòu)如下:(編號、名稱、類型、長度、像素、距離、圖片地址、創(chuàng)建時間戳)。對于距離記錄而言,類型值為1時表示保存的是參考物與鏡頭的參考值,類型值為2時表示保存的是待測物與鏡頭的距離測量結(jié)果。

      5 測量數(shù)據(jù)誤差分析

      5.1 測量照片上待測物與手機(jī)的距離誤差分析

      測量樣品來源于多個物件[15],采用小米3移動版進(jìn)行拍攝,其中待測物長度、待測物與手機(jī)的距離通過使用卷尺進(jìn)行測量,測量數(shù)據(jù)如表1所示。

      表1 測量照片上待測物與手機(jī)距離結(jié)果分析

      續(xù)表1

      5.2 測量照片上待測物長度數(shù)據(jù)分析

      測量樣品來源于多個物件,采用小米3移動版進(jìn)行拍攝,其中參考物長度、待測物長度通過使用卷尺進(jìn)行測量,測量數(shù)據(jù)如表2所示。

      表2 測量照片上待測物長度結(jié)果分析

      根據(jù)實(shí)驗結(jié)果可以看出,軟件的測量照片上的待測物長度和測量照片上待測物與手機(jī)距離這兩大功能計算出的結(jié)果相對誤差較低,可以滿足對生活中非專業(yè)要求的測量需求,具備很高的實(shí)用性。

      6 結(jié)束語

      設(shè)計了一款基于Android的測量軟件。軟件具有3大功能,包括測量照片上待測物長度、測量照片上待測物與手機(jī)距離以及在屏幕上繪制等比例直尺,并詳細(xì)說明了這些功能的原理、算法以及使用方法。該軟件自面世起,經(jīng)過多場景大量的測試和驗證,結(jié)果表明該軟件的操作方法簡單,對現(xiàn)場要求不高,且測量誤差較低,尤其適合非規(guī)則化、傳統(tǒng)方式不易操作的場景,具有很高的實(shí)用價值。

      猜你喜歡
      待測物物件像素點(diǎn)
      打開話匣子的好物件
      老物件
      舊元素,新物件
      老物件,大樂趣
      收藏界(2018年3期)2018-10-10 05:34:04
      基于canvas的前端數(shù)據(jù)加密
      “燃燒熱測定”實(shí)驗的改進(jìn)
      基于逐像素點(diǎn)深度卷積網(wǎng)絡(luò)分割模型的上皮和間質(zhì)組織分割
      基于Node-Cell結(jié)構(gòu)的HEVC幀內(nèi)編碼
      高電壓輔助激光解吸附離子化質(zhì)譜中鹽效應(yīng)的研究
      生物組織折射率分布的P偏光測量研究
      岳阳县| 大洼县| 浦江县| 白水县| 潞城市| 新晃| 东平县| 丹棱县| 灵璧县| 泸定县| 家居| 温泉县| 贵溪市| 合江县| 孟州市| 合作市| 阜城县| 哈巴河县| 舟山市| 扶沟县| 安乡县| 徐闻县| 三都| 加查县| 平阳县| 称多县| 剑阁县| 军事| 凤翔县| 阳高县| 仁怀市| 沙雅县| 四川省| 福清市| 和林格尔县| 晋宁县| 南昌县| 五莲县| 仙居县| 水城县| 卢湾区|