湯濟銘
(西京學院 電子信息學院,陜西西安,710123)
近年來,人民對藥品的需求急劇增大,膠囊劑藥是最常見的一種藥物劑型。其具有便于攜帶和服用的特點。膠囊可以將藥物很好地保護在膠囊內,避免藥物受到外界污染和方便患者服用。膠囊劑藥成品應保持外觀整潔,無缺漏、明顯的損傷、污染、變色等現象,并且要求膠囊劑大小、形狀、顏色統一。膠囊劑成品檢測是其生成過程中不可或缺的一步,通常由人工進行,然而人工具有成本高、效率低、無法滿足大規模生產的缺點。無法滿足人民對藥品需求的急劇增大和應對人口老齡化的現狀,給有限的醫療資源造成了不小的壓力。
隨著現代化科技的快速發展,人工智能的出現改變了人類的生產和生活方式。人工智能可以通過自動化和智能化技術,大幅降低了生產成本和提高了工作效率;可以通過處理大量數據并訓練出精準的模型,來解決諸如圖像、語音、自然語言等領域的復雜問題;可以為企業提供更準確、更快速、更智能的服務,從而創造出新的商業價值;還可以應用于醫療、教育、金融、交通等領域,為人們的生活帶來極大便利和改善。人工智能已經成為新一代科技革命和產業變革的核心驅動力,是研究智能和認知機制的重要手段,對于推動人類科學、社會發展、世界經濟的進步具有重要意義[1]。
機器視覺技術是人工智能快速發展的分支之一。機器視覺利用機器代替人眼做一些復雜的技術,從客觀的事物圖像中提取出人類所需要信息,并對這些信息進行處理、分析、理解及反饋等類似于人腦的功能,如工業上的識別、定位、測量和檢測等技術。機器視覺是一門由多門技術融合起來的綜合技術,包括數字圖像處理、機械工程、控制工程、光學、視覺、計算機軟硬件等多門技術。一個典型的機器視覺系統包含照明、鏡頭、高速相機、圖像采集卡、視覺處理機五大模塊。其工作過程可概括為:光源、成像、圖像捕捉、數模轉換(A/D 轉換)、圖像處理與決策、控制系統等過程。在大批量重復性工業生產過程中,機器視覺系統可以顯著提高工業生產效率和自動化程度,還可以替代人工去完成一些危險的工作或者人類視覺難以滿足生產要求的工作[1]。
本文通過機器視覺技術對膠囊劑藥的圖像進行Blob 分析,從而得到每一個膠囊劑的尺寸和顏色數據特征,將黃色膠囊藥丸視為標準藥丸,藍色膠囊藥丸視為壞藥丸,通過各個膠囊的尺寸和顏色信息與標準的黃色膠囊藥丸特征進行對比,判斷其是否存在缺漏、明顯的損傷、污染、變色等現象。以此促進生產效率和生產規模、降低生產成本,實現高質量生產。
利用機器視覺軟件Halcon 對得到的膠囊劑圖片進行數據分析,具體步驟如圖2 所示。
Blob(Binary large object)分析用來將圖像二值化,分割得到圖像的前景區域,即圖像中的具有相似顏色、紋理等特征所組成的一塊連通區域。然后對該連通區域進行特征測量,計算出目標的數量、形狀、面積、大小和方向[2]。Blob 分析的步驟主要分為獲取圖像、圖像分割、特征提取三步。通常會運用到ROI(感興趣區域)定位、圖像預處理、圖像分割、區域處理、特征提取、顯示或輸出等操作算子。
2.1.1 圖像預處理
預處理工作是圖像處理中的關鍵一步,其直接決定著圖像處理的成功與否。預處理主要是為了消除圖像中對結果無用的信息,保留及增強對結果有重要作用的信息。成功的預處理可以讓后續的圖像工作達到事半功倍的效果。關于預處理,本文將彩色圖像分解成R、G、B 三通道圖像,選取其中圖像前景和背景顏色對比度最突出的通道作為處理圖像,以便更方便地提取所需的關鍵信息。
實驗中,發現藍色通道圖像的藥丸區域與背景區域的像素對比度相較于紅色、綠色通道更為明顯,圖像處理起來更直接、容易。因此本文采用藍色通道圖像進行后續的圖像處理操作。
2.1.2 圖像分割
關于圖像分割部分,本文對膠囊圖像進行閾值分割,以實現單獨分割出膠囊區域的目的,減小操作的復雜度。閾值分割是一種基于區域的圖像分割處理方法,原理是將原灰度圖像中的像素點按照其對應灰度值的大小進行分類,對原灰度圖像進行一個分割,分割后的結果對應著原圖像中不同的現實景物。分割后的各個區域內部具有高相關性,不同區域之間具有低相關性。閾值分割將輸入圖像中滿足分割條件的所有圖像像素點都作為一個區域返回,如果傳遞了多個灰度值空間(MinGray和MaxGray的元組),則為每個區間返回一個單獨的區域。
Halcon 中閾值分割的數學公式可表示為:
其中f(x,y)為坐標點(x,y)處的像素值,g(x,y)為閾值分割后圖像點(x,y)處的像素值,MinGray、MaxGray分別為灰度值的下限、上限閾值。通過調試的方法,嘗試不同的閾值以實現最佳的分割效果,達到令分割出來的膠囊區域具有清晰的邊緣和連續性,并且能夠準確地區分出膠囊區域與其他背景區域。
實驗中,用threshold 算子對圖像進行閾值分割,將藥片所在位置與圖像背景區域分割開,以縮小待處理區域。然后用connection 算子將閾值分割的區域打散,由于藥片所在區域必然是打散后區域中面積最大的一個,因此直接用select_shape_std 算子選擇面積最大的區域。接著用shape_trans 算子將藥片區域的形狀變換成矩形區域,更貼合實際區域。最后用reduce_domain 將藥片所在區域裁剪下來,后續的操作直接在裁剪區域上進行,進一步縮小處理范圍。
具體算子如下:
圖像分割結果如圖7、8 所示。
2.1.3 特征提取
實驗發現,原黃色膠囊區域在藍色通道圖片中與其他區域的對比度比較明顯,灰度值較低,將其分割出來比較簡單易行。因此可以根據這一特征,利用Blob 分析的方法逐步向其逼近。先用decompose3 算子獲取藍色通道圖像,然后對其進行閾值分割、形狀選擇等操作。
具體算子如下:
實際中,膠囊藥片的大小、背景顏色基本一致,膠囊所處的位置基本固定不變,不同膠囊藥丸種類間的區別多為膠囊顏色不同。本文根據這一特征,在標準藥丸圖片中,定位到膠囊所在區域,然后用矩形框的形式將膠囊所在區域逐個表示出來,這里需要用到for 循環語句。
具體算子如下所示:
實驗效果如圖9、10 所示。
2.1.4 區域處理
分割、特征提取后的圖像需要進行形態學區域處理。形態學處理是圖像處理中用的最廣泛的技術之一,是一種基于形狀、結構的處理技術。形態學處理可以抓住圖像中最為本質、最有需要的特征,用規定的結構元去度量和提取圖像中的對應形狀,從而達到改善圖像的質量和增強圖像特征的目的。常用于特征提取、圖像分割、去噪等方面[3]。腐蝕、膨脹、開、閉運算是圖像形態學處理中的基本運算方法。
腐蝕操作是指一個集或對象目標從其原來的形狀收縮的過程。該目標縮小的方式是由結構元素決定的。其表達式為:
假設A 和B 是Z2中的兩個集合,B 對A 的腐蝕(表示為AΘB)定義為:
式中,A 是前景像素的一個集合,B 是一個結構元,Z是前景像素值。換句話說,這個公式指出B 對A 的腐蝕是所有點Z的集合,條件是平移(相對于B 的原點)Z后的B 包含于A。腐蝕可以消除物體的邊界、將小于結構元的物體(毛刺、小凸起)去除。
與腐蝕相反,膨脹操作是指一個集或對象目標從其原來的形狀擴大的過程。該目標擴大的方式也是由結構元素決定的。膨脹會擴充物體的邊界,將與物體接觸的所有小于結構元的背景點合并到該物體中,如果兩個物體之間的距離小于結構元,膨脹會把兩個物體連通到一起[3]。
假設A 和B 是Z2中的兩個集合,B 對A 的膨脹(表示為A ⊕B)定義為:
公式(3)是以B 相對于其原點反射并將這一反射平移Z為基礎的。于是,B 對A 的膨脹就是所有位移Z(對的原點的位移)的集合,條件是的前景元素與A 的至少一個元素重疊。
開運算是對圖像進行先腐蝕后膨脹操作,用來去除區域中小點、毛刺等,開運算可以消除區域中比結構元小的物體、平滑物體的邊界。閉運算與開運算相反,對圖像進行先膨脹后腐蝕操作,用來填充物體內比結構元小的孔洞、平滑物體的邊界,同時可以連接臨近的物體[3]。本項目中主要是消除閾值分割后所得圖像中的孔洞、平滑邊界,以形成整體區域方便后續的區域定位操作。
具體算子如下所示:
在圖像采集過程中,由于每次采集到的圖像不同,膠囊所處的位置也不同,需要將膠囊所在位置與矩形框位置進行圖像配準。因此,對采集到的圖像進行仿射變換便成了檢測過程中必不可少的一步。仿射變換是指在平面上將圖形進行線性變換和平移的組合操作。它可以保持原始圖形中的平行線仍然平行,并且保持原始圖形中的比例關系不變。常見的仿射變換包括平移、旋轉、縮放和剪切等操作[4]。仿射變換一般由兩部分組成,先對一個向量空間做一次線性變換,再對線性變換后得到的向量進行平移,由此變換為所需要的向量空間。仿射變換前后圖像的凸性、共線性、平行性、共線比例不變性等性質保持不變,只可能改變圖像的比例及角度。
仿射變換的一般數學表達式如下:
在二維圖像中,仿射變換一般表示為:
雖然每次采集到的圖像可能各不相同,但膠囊在整個藥板里的位置是固定的。根據這一現象,將所采集到的圖像區域仿射變換。仿射變換所需的行、列坐標及角度即為所獲取圖像的行、列坐標及角度。這樣不管后續所采集到的圖像是否發生偏移、旋轉、傾斜等情況,都能保證膠囊所在位置永遠都處于矩形框內,方便后續對多幅圖像進行分割、特征提取和檢測等操作,提高了程序的魯棒性。
具體算子如下:
實驗效果如圖11、12 所示。

圖1 機器視覺工作流程圖

圖2 膠囊檢測流程圖

圖3 原圖像

圖4 紅色通道圖像

圖5 綠色通道圖像

圖6 藍色通道圖像

圖7 圖像分割(a)

圖8 圖像分割(b)

圖9 特征提取(a)

圖10 特征提取(b)

圖11 仿射變換前

圖12 仿射變換后

圖13 面積檢測(a)

圖14 面積檢測(b)
圖像在經過仿射變換后,膠囊所在的位置便位于前文所創建的矩形框區域內,通過Blob 分析分割出膠囊各自所在的區域,并對各自的區域與矩形框區域內的各個矩形框進行交運算。由于壞膠囊和空膠囊的灰度值與正常膠囊相差甚多,在閾值分割時已將壞膠囊的一部分和空膠囊區域分割出去了,壞膠囊只剩下一半的面積區域。因此在面積檢測時很容易將壞膠囊和空膠囊同正常膠囊進行區分。
因為矩形框區域的面積大于膠囊面積,并將膠囊區域完全覆蓋,因此兩個區域進行交運算所得的結果便為膠囊區域的面積。通過對膠囊進行分割后的特征檢測可以得出膠囊區域的面積約在12000 像素,因此可以設置一個低閾值點8000 像素,若兩區域的交集面積低于閾值點8000 像素,便說明該區域內的膠囊存在問題,直接判定結果為壞膠囊,若大于低閾值點便繼續對該區域進行后續的灰度值檢測,而若兩區域的交集面積等于0 便說明該區域內沒有膠囊,直接判定結果為空膠囊。將空膠囊所在區域用紅色矩形框顯示,壞膠囊所在區域用紅色標識顯示。
除了缺漏、損壞,膠囊在生成過程中也有可能受到污染、變色等情況,單獨對膠囊所在區域進行面積檢測還不足以說明膠囊沒有問題。因此還需要對膠囊圖像進行灰度值檢測,利用min_max_gray 算子得到檢測區域的最大、最小灰度值,若膠囊受到了污染、變色的情況,其部分區域的灰度值f′(x,y)必然不會與正常區域的灰度值f(x,y) 大小相同,因此可以根據膠囊區域的灰度值再次對膠囊的好壞進行判斷。通過對好的膠囊圖像區域進行特征檢測,得到其大致的灰度值取值范圍,倘若在檢測過程中,待檢測區域膠囊的灰度值與好的膠囊區域的灰度值相差甚多,兩者之差大于所設定的閾值T,便判斷該區域內的膠囊存在問題,判定其為壞膠囊,若兩者之差小于閾值T,便認為該區域的膠囊沒有問題。本文設T=50 。
具體算子如下所示:
實驗效果如圖15、16 所示。

圖15 灰度值檢測(a)

圖16 灰度值檢測(b)
為了驗證藥丸檢測算法的通用性,使用不同藥丸圖片進行檢測,修改算法中生成矩形框所在位置和其他部分算子的參數。實驗效果如圖17~圖20 所示。

圖17 通用性驗證(a)

圖18 通用性驗證(b)

圖19 通用性驗證(c)

圖20 通用性驗證(d)
結果表明,算法具有一定的通用性,可以對不同的膠囊圖像進行測量,并得到較滿意的結果。
本文基于Halcon機器視覺軟件對膠囊藥丸進行缺陷檢測,取得了較滿意的實驗結果。但本實驗僅依賴于Halcon 軟件,未能實現窗體化的操作程序,且每次檢測的藥丸數量有限,并且對圖片采集環境要求較高。在擁有大量數據集的情況下,多用深度學習算法對藥丸進行檢測,有待后續進一步研究。