【论文党福利】如何提取图像中的数据
【論文黨福利】如何提取圖像中的數(shù)據(jù)
? ? ?從事科研的老師和同學(xué)們在撰寫論文時,經(jīng)常需要將文獻中的曲線與自己的結(jié)果進行對比,為獲取原始數(shù)據(jù),最靠譜的方法當(dāng)然是找原作者要。如果沒有要到呢?本文將成為論文黨的福利,為你提供你兩種解決方案,均是用matlab實現(xiàn)的。
? ? ?一種辦法是編寫一個GUI程序,將待扣取數(shù)據(jù)的圖像繪制到屏幕上,再配合一些放大、拖拽等功能,通過手動描點的方法來得到結(jié)果,我們稱作描點法。
? ? ?另一種方法,根據(jù)你待獲取數(shù)據(jù)的曲線中的一些規(guī)律,編寫一個從圖像中扣取數(shù)據(jù)點的程序。相比手動描點方法帶來的隨機誤差,這種方法得到的結(jié)果比較精確,但也許需要你根據(jù)實際問題來調(diào)整代碼或者配置文件。
? ? ?第一種方法源于網(wǎng)上比較流行的一個手動描點小程序。第二種方法是我在解決實際問題時編寫出來的,本文將只介紹第二種方法如何實現(xiàn),兩種方法的程序均免費提供,獲取途徑見文末。
----------------------------------------------華麗分割線------------------------------------------------------
? ? ?直接進入主題,我面臨到這樣一個問題,老師希望我能獲取到下面一幅圖像中的數(shù)據(jù),以便能夠和自己得到的結(jié)果進行對比。圖像如下所示:
? ? ?圖形中曲線一般有特定的顏色加以區(qū)分,比如紅色。
? ? ?圖中可能出現(xiàn)多個曲線需要提取。
? ? ?一般情況待提取數(shù)據(jù)的曲線出現(xiàn)的位置是不固定的,但我們根據(jù)實際背景很容易確定一個提取曲線的橫坐標(biāo)范圍。
? ? ?通常我們只需在X軸進行等距提取就可以了。
? ? ?總的來說,圖像就是一個矩陣,矩陣的每個元素對應(yīng)一個像素,其實就是一種顏色。我們只需要告訴程序我們要提取X=X0時的函數(shù)值Y0,程序要做的也僅僅是沿著X0對應(yīng)的矩陣的那一列從函數(shù)值低的方向向函數(shù)值高的方向去尋找是否到達了曲線上的點,這樣就可以達到提取數(shù)據(jù)點的功能。
? ? ?再結(jié)合上面的分析,我們的程序從設(shè)計的角度建立了下述的一些邏輯,來盡可能的讓我們的程序能夠處理大多數(shù)的圖像提取問題。閱讀了下面這些細(xì)節(jié),你將能對整個程序的大體框架有很好的理解,并且能針對具體問題進行針對性的調(diào)整。
? ? ?1.如何批量處理?
? ? ?為了能夠提高效率,我們需要批量處理,其實很簡答,我們需要一個ImageList.txt文件來告訴程序都有哪些圖像需要處理。文本文件內(nèi)部結(jié)構(gòu)如下圖所示:
? ? ?2.遍歷矩陣時,當(dāng)前判定點是否是曲線上的點?
? ? ?這很好處理,使用當(dāng)前像素的顏色,也就是R、G、B三原色的取值來判定。例如,上圖中,我們待提取曲線是紅色的,我們只需判斷矩陣中的每個元素是否為紅色,也就是(255,0,0)。實際使用時我添加了一個閾值,來防止圖中的曲線顏色看起來是紅色,但其實不是正紅,也就是數(shù)值接近紅色但有區(qū)別的情況,比如顏色是(250,10,5)。
? ? ?3.等距提取
? ? ?我們的程序使用在X軸上等距提取數(shù)據(jù)點的方法,這更符合我們的需求。你只需要告訴程序你要提取點的范圍和等距提取多少個點。
? ? ?4.如何確定坐標(biāo)軸范圍?
? ? ?這里我們又需要配置一個Axeslist.txt文件來告訴程序每幅圖像中的坐標(biāo)軸范圍,以便程序能夠在矩陣索引值和實際坐標(biāo)軸坐標(biāo)間進行換算。該文件如下圖所示:
? ? ?需要注意的是,每行代表一幅圖像的坐標(biāo)軸范圍信息,其內(nèi)容要與ImageList.txt中列出的圖像一一對應(yīng)。
? ? ?5.如何確定提取范圍?
? ? ?這里我們又需要配置一個ExtractPointsList.txt文件來告訴程序需要提取點的范圍是什么?每個范圍內(nèi)等距分為多少份?該文件如下圖所示:
? ? ?每行代表一幅圖像的取點范圍及個數(shù)信息,同樣地,其內(nèi)容要與ImageList.txt中列出的圖像一一對應(yīng)。
? ? ?配置好了上面所介紹的三個.txt文件,剩下的工作交給程序來完成就好了。運行的結(jié)果會保存在當(dāng)前目錄下,就像這樣:
? ? ?以保存的文件結(jié)果Result1為例,使用如下一行代碼即可將結(jié)果提取出來:
? ? ?load Result1 Result
? ? ?最后就可以將提取的論文中的結(jié)果和我們自己的比對著試試了:
------------------------------------------------華麗分割線----------------------------------------------------
? ? ?另一種描點法的程序是我在網(wǎng)上找到的。
? ? ?本文介紹方法的源代碼是我自己編寫的。
? ? ?我打包在了一起:下載鏈接
? ? ?另外,歡迎大家關(guān)注我們團隊的微信公眾號:LSGO軟件技術(shù)團隊
總結(jié)
以上是生活随笔為你收集整理的【论文党福利】如何提取图像中的数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sum()转字符串_Python字符串与
- 下一篇: STM32基于AD5663的UV灯电压控