Ÿl−Öe⁄ - fcu.edu.t · iii ‡æe⁄dx›† in this research an automatic optical measurement...

61
2 x R c R6 x e ACF nx v Research of th Examinat c 導e c x : i R 1 o R A t A

Upload: others

Post on 06-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

  • 逢 甲 大 學

    自動控制工程學系專題製作

    專 題 論 文

    ACF檢測之研究

    Research of the ACFExamination

    指導教授:林宸生

    學生:楊博勛

    許哲豪

    謝潤賢

    劉邦亦

    中 華 民 國 九 十 七 年 十 二 月

  • i

    誌謝

    在此感謝指導教授林宸生老師在製作專題的過程中所給予的指導及包

    容,不僅充實了自我的專業知識,在學習及待人處事態度上亦讓我們有許多

    的成長空間,尤在責任感上的成長。

    在此也感謝實驗室的學長姐及同學們的建議與協助,特別感謝韋子祺學

    長的指教與協助,最後,感謝我們的家人在這段期間給予的關懷,成果與您

    一同分享,謝謝。

  • ii

    中文摘要

    我們主要是利用改良型的二質化搜尋比對,針對 LCD (液晶顯示器)面板壓

    合製程中,ACF(Anisotropic conductive film,異方性導電膜)的導電粒子壓合

    情況,進行量測判定之應用。ACF是製作 LCD的重要導電材料,應用在於垂直方

    向電導通效果的重要關鍵,本研究透過二質化與來計算破碎來比對技術,可以將

    LCD面板內 ACF壓合的待測影像,利用圓週與面積同步的多重比對功能,找出分

    布於各 Bump內之導電粒子位置與數量,同時,做粒子的偏移量、破裂情況分析

    等檢測相關動作。

    本研究著重在特徵影像描述與辨識,並且找出各個 ACF的破裂圖形,面積,

    其中主要包含有加入可忽略灰階值的設計,與任意形狀之樣板矩陣設計、對比度

    自動調整,以及任意形狀之特徵權重矩陣設定等等,在系統執行效能上,除了能

    將誤判的情況大為降低,使找到的區塊影像更為準確外,其在執行全域影像之樣

    板搜尋比對時,系統執行效率亦更為快速。

  • iii

    英文摘要

    In this research an automatic optical measurement system for the

    fracture conditions of anisotropic conductive film(ACF) is presented. On

    the process of searching, analyzing, and recognizing of ACF-LCD images,

    the measurements include the quality verification and quantity

    calculation of ACF. We used different methods to determine the fracture

    factors and the ACF area for each type. The improving method of the

    template matching, and largely decreasing the time of checking the image

    for pattern matching was verified in the experimental results of this

    imaging system.

    In this study, it is the main purpose to modify, combine and change

    a color images with another color image by using the image processing

    technology and the characteristic of the color harmony. We obtain the

    binary images form the original, and the binary images take pixelization

    later soon. We develop a new method to process the experimental data and

    evaluate the effect of signal to noise ratio in the PC-base digital signal

    processing system. Specialized image editing technologies have been

    developed to enable users to enhance images in a myriad of ways. Advanced

    image processing functions include binarization, anti-aliasing, thinning,

    despeckle, deskew, auto color leveling, auto contrast, zooming, auto tint,

    and more. The program can be operated automatically, and economically in

    a PC platform. This system allows people to manipulate and analyze data

    in the form of digital images.

    Keywords:AnisotropicConductiveFilm,Aracture,AutomaticOptical

    MeasurementSystem

  • iv

    目錄

    誌謝……………………………………………………………………………… ……i

    中文摘要…………………………………………………………………………… ii

    英文摘要…………………………………………………………………………… iii

    目錄 …………………………………………………………………………………iv

    圖目錄……………………………………………………………………………… vi

    表目錄 …………………………………………………………………………… viii

    第一章 前言…………………………………………………………………………1

    1.1研究背景…………………………………………………………………… 1

    1.1.1LCD製程與 Drive IC封裝技術簡介………………………………1

    1.1.2異方性導電膜及導電粒子介紹……………………………… 4

    1.1.3異方性導電膜的導電原理………………………………………… 6

    1.2研究動機…………………………………………………………………… 7

    1.3研究目的及其重要性……………………………………………………… 7

    第二章 理論基礎…………………………………………………………… 10

    2.1導電粒子破裂特徵……………………………………………………… 10

    2.2影像前處理……………………………………………………………… 11

    2.2.1影像前處理_分辨標準量…………………………………………11

    2.2.2二值化…………………………………………………………… 12

    2.2.3細線化…………………………………………………………… 14

    2.3邊界搜尋法……………………………………………………………… 18

    2.3.1前進邊緣搜尋法………………………………………………… 18

    2.3.2八鄰接點搜尋法………………………………………………… 19

    第三章 實驗結果與討論……………………………………………………………21

    3.1系統執行流程…………………………………………………………… 21

  • v

    3.2影像前處理……………………………………………………………… 23

    3.3研究正反取像及實驗…………………………………………………… 24

    3.3.1正面取像………………………………………………………… 24

    3.3.2反面取像………………………………………………………… 27

    3.4實驗結果分析及討論…………………………………………………… 33

    3.4.1正面取像討論…………………………………………………… 33

    3.4.2反面取像討論…………………………………………………… 34

    第四章 結論…………………………………………………………………………35

    4.1結論……………………………………………………………………… 35

    參考文獻…………………………………………………………………………… 36

    附錄………………………………………………………………………………… 37

  • vi

    圖目錄

    圖 1.1LCM製程原理及流程…………………………………………………1

    圖 1.2TAB結構圖…………………………………………………… ………2

    圖 1.3COF結構圖………………………………………………………………… 3

    圖 1.4COG結構圖………………………………………………………………… 3

    圖1.5(a)異方性導電膜提供兩種接合物體對於垂直方向的電導通…………… 5

    圖1.5(b)異方性導電膜自動光學系統之低對比、高複雜性之檢測影像……… 5

    圖 1.6三種破壞程度的示意圖…………………………………………………… 6

    圖 1.7導電粒子壓合偏移…………………………………………… …… 8

    圖 1.8導電粒子壓合成功與失敗………………………………………… 8

    圖 2.1導電粒子破壞程度判定……………………………………………………10

    圖 2.2灰度分佈統計圖…………………………………………… ………13

    圖 2.3(a)打光前之眼球影像的灰階亮度統計圖……………………… 14

    圖 2.3(b)打光前後之眼球影像的灰階亮度統計圖 …………………… 14

    圖 2.43×3子影像…………………………………………………………………15

    圖 2.5(a)橢圓…………………………………………………………………… 17

    圖 2.5(b)細化後的橢圓骨架…………………………………………………… 17

    圖 2.5(c)圖 2.5(a)與圖 2.5(b)重疊……………………………………………17

    圖 2.6前進邊緣搜尋法,向下搜尋示意圖………………………………………18

    圖 2.7原始影像(左)與追蹤結果(右)示意圖……………………………………19

    圖 2.8八鄰接點搜尋 Mask……………………………………………………… 20

    圖 3.1系統流程圖…………………………………………………………………22

    圖 3.2影像前處理(一)……………………………………………………………23

    圖 3.3影像前處理(二)……………………………………………………………24

    圖 3.4導電粒子原影像……………………………………………………………24

    圖 3.5灰階的影像…………………………………………………………………25

    圖 3.6二質化的影像(一)…………………………………………………………25

    圖 3.7導電粒子數…………………………………………………………………26

  • vii

    圖 3.8各區域面積與周長及破裂比質……………………………………………27

    圖 3.9ACF影像……………………………………………………………………28

    圖 3.10導電粒子原影像(左)及灰階的影像(右)……………………………… 28

    圖 3.11導電粒子原影像(左)及邊緣偵測的影像(右)………………………… 29

    圖 3.12二質化的影像(二)……………………………………………………… 29

    圖 3.13 3×3的 mask……………………………………………………………… 30

    圖 3.14四相鄰示意圖…………………………………………………………… 30

    圖3.15八相鄰示意圖…………………………………………………………… 30

    圖3.16八相鄰搜尋法座標示意圖……………………………………………… 31

    圖 3.17導電粒子數與各區面積………………………………………………… 32

    圖 3.18導電粒子損毀率對照圖………………………………………………… 34

    圖 3.19標記區域與顯示面積…………………………………………………… 34

  • viii

    表目錄

    表 1.1封裝技術優缺點比較……………………………………………………… 4

    表 3.1面積、周長、比値……………………………………………………………33

    表3.2粒子缺損率分析…………………………………………………………… 33

    表3.3標記區域與顯示面積……………………………………………………… 34

  • ix

    附錄

    附錄 1程式(一)……………………………………………………………………37

    附錄 2程式(二)……………………………………………………………………41

    附錄 3程式(三)……………………………………………………………………46

    附錄 4程式(四)……………………………………………………………………48

  • 1

    第一章 前言

    1.1研究背景

    1.1.1 LCD製程與Drive IC封裝技術簡介

    在LCD面板製程中,可大致分為兩段,前段是指玻璃的製造,包括前後玻

    璃基板,彩色濾光片,偏光膜以及液晶等等,前段製程後,稱為LCD Panel。

    而LCM(Liquid Crystal Display Module)製程,如圖1.1所示,先在LCD Panel

    的外觀進行檢查,並進行塗抹導電膠等的前置作業,而後組裝加上驅動IC,以及

    外圍電路和一些機構部品,最後再進行規格檢定,亦即整個LCD面板的後段製程

    通稱為LCM製程。

    圖 1.1LCM製程原理及流程

    然而隨著面板廠不斷開出產能,帶動對LCD驅動IC封裝的需求,在目前

    TFT LCD驅動的主流封裝技術主要是利用異方性導電膜內錫球接合元件與其基

  • 2

    板,但利用錫球的方式於接腳間距小至80um以下,則製程有相當的困難性。因

    此,於LCD驅動IC的應用上,主要是以TCP(Tape Carrier Package;捲帶封裝)、

    COF(Chip on Film;薄膜覆晶)、COG(Chip on Glass;玻璃覆晶)三種技術為主;

    在消費型電子產品講求輕、薄、短、小的趨勢下,對於高腳數、微細間距(Fine

    Pitch)的封裝技術油然而生,因此傳統的打線接合封裝技術已被TCP、COF與

    COG所取代。

    在這三種技術當中,捲帶式封裝(Tape Carrier Package; TCP)的引腳接合

    是採用捲帶自動粘合(Tape Automated Bonding; TAB)技術以取代傳統打線(Wire

    Bonding)方式的一種封裝方式。圖1.2為TAB封裝之結構圖。捲帶封裝的裝製程

    可分成前後兩段,前段先利用蜘蛛式引腳的捲帶,以內引腳接合(Inner Lead

    Bonding;ILB)完成與IC晶片的連接,後段再利用外引腳(Outer Lead Bonding;

    OLB)接合技術,完成與封裝基板的接合。TCP的優點在於可以縮小驅動IC晶

    片的金屬悍墊間距,所以可適用在體積小的消費電子產品。但當因應高解析度細

    間距要求時,懸空之引腳強度無法支撐,容易變形,不易與IC結合,因此TCP

    方式無法對應細間距的趨勢,且其捲帶基材成本雖便宜,但因TCP製程步驟多,

    使TCP封裝完成後整體成本反而高於其他封裝方式。

    圖 1.2 TAB結構圖

    薄膜覆晶封裝COF技術,則是將驅動IC晶片與被動電子零件(Passsive

    Device)直接封裝在薄膜之上,不必在軟膜捲帶形成組件孔,又因為COF封裝是

    將內引腳直接附在薄膜,所以薄膜覆晶封裝技術不會產生內引腳變形的問題,又

    可以省去傳統的印刷電路板,所以比TCP捲帶封裝更適合輕薄短小的消費電子

  • 3

    產品,所以大尺寸LCD TV面板的產品主要可以視為TAB產品的延伸,利用

    COF取代傳統TAB技術應為未來的趨勢。不過,相對COF基材的成本也比較

    高。圖1.3為COF封裝之結構圖。

    圖1.3 COF結構圖

    至於玻璃覆晶封裝COG比起前兩種技術,封裝成本更低,由於玻璃覆晶封

    裝是用UV、銀膠將裸晶片直接黏在LCD玻璃基板之上,再以覆晶作為接合技

    術,不僅省去捲帶的成本,又比TCP與COF更適合高畫質、高解析度的LCD TV

    模組,然而,由於COG構裝時施加的高溫,造成常溫下玻璃基板產生應力集中,

    進而造成其產生Mura的缺陷,針對此問題,ACF製造商已開發低溫製程應用

    之ACF設備商已提出基板與晶片可同時加熱之裝置,另外可以搭配驅動IC接

    腳的細微化,來克服玻璃基板形變的問題;但由於玻璃覆晶封裝是直接把裸晶片

    封裝在基板上,所以只要有一顆驅動IC出現瑕疵,整片玻璃基板就要報廢,如

    果基板的尺寸越大,報廢的成本就越高所以採取玻璃封裝的風險就越高,現階段

    COG技術仍多應用在中小尺寸TFT LCD之中。圖1.4為COG封裝之結構圖。

    表1.1為封裝技術之優缺點比較表格。

  • 4

    圖1.4 COG結構圖

    表1.1封裝技術優缺點比較

    中小尺寸面板封裝技術需著重輕薄及降低封裝成本的因素,COG方式可滿

    足此需求,雖COG易有Mura與額緣大的問題,但目前廠商已想對策改善,如:

    改變COG封裝貼附軟性印刷電路板(Flexible Printed Circuit;FPC)的方式,

    來改

    善額緣大的問題、以低溫方式接合,解決Mura缺陷等,因此預測中小尺寸面板

    封裝市場仍會以COG為主流封裝方式。而本篇論文所要檢測之LCD面板內的

    ACF導電粒子其與Drive IC的封裝方式,亦是採用COG方式封裝。

    1.1.2異方性導電膜及導電粒子介紹

    目前LCD面板製程上,結合異方性導電膜的IC覆晶構裝技術,就如前一節

    所敘述的三種主要封裝技術,皆是屬於金屬凸塊接合技術(Gold Bumping),比起

    傳統的錫鉛凸塊接合技術(Solder Bumping)有著不少優點:

    ●間距可小到10微米

    ●不用助熔劑,不含鉛,對環境破壞較小

  • 5

    ●壓合溫度較低

    ● 附著性好

    ●整體厚度較小

    ACF主要的功能在於提供兩種接合物體對於垂直方向的電導通,而在水平

    方向則具有絕緣效果,異方性導電膜主要由導電粒子與黏接劑(Binder)組成,將

    驅動IC,TCP(TCPs, tape-carrier packages) IC固定於TFT-LCD panel上,如

    圖1.5(a)所示,此時ACF貼附於TCP IC與印刷電路板(PCB, Printed Circuit

    Board)的端子上,藉由控制溫度與壓力的壓合,使異方性導電膜之導電粒子破裂

    變形,而構成導通電路。圖1.5(b)為ACF之檢測影像。而導電粒子破裂變形的

    情況判定,會依各家LCD面板廠的品管標準不同而有所差異,圖1.6為三種破壞

    程度的示意圖。

    圖1.5 (a) 圖1.5 (b)

    圖1.5 (a)異方性導電膜提供兩種接合物體對於垂直方向的電導通

    圖1.5 (b)異方性導電膜自動光學系統之低對比、高複雜性之檢測影像

  • 6

    圖 1.6三種破壞程度的示意圖

    然而ACF的組成主要包含導電粒子及絕緣膠材兩部分,同時具有導電、絕

    緣、黏著的功能;它在熱壓著後,膜厚垂直方向會形成導電粒子的電導通,但在

    導電粒子間是呈單分散性的分布,依然保持充份距離,因此膜面方向是絕緣。

    1.1.3異方性導電膜的導電原理

    異方性導電膜的導通原理,是利用導電粒子連接面板上之ITO(Indium Tin

    Oxide,銦錫氧化物)電極與IC的Pad腳,來達成電器導通之目的。

    關於LCD液晶顯示器所使用之ITO電極,是蒸鍍於玻璃基板表面上的一種

    透明導電薄膜,其本身具有良好導電性,我們稱之為ITO玻璃。以COG產品來

    說,ITO Layout造成的阻值,或多或少會影響驅動IC與面板顯示的效能,因此

    ITO玻璃的阻值會根據設計需求,選擇適合之電阻值;對於COG產品製程的要

    求,一般來說是注重在導電特性上,除了ITO玻璃的阻值考量外,還須考量整

    體系統的導電性,而著重在導電粒子的變形量及導電粒子數目,這將攸關製程各

  • 7

    參數的設定,製程壓力越大,導電粒子變形量增大,亦即被壓的更扁,則導通部

    分接觸面積增大,接觸阻抗則越小;反之,若壓力過小,將導致接觸面積不足,

    接觸阻抗過大,而發生導電不良的情形。

    1.2研究動機

    近年來,由於半導體技術的成熟發展,積體電路的應用趨於普遍,使得科技

    產品的應用面,變得越來越加寬廣,同時,電子產品也越來越精緻輕巧,也因此

    液晶原理所應用發展的LCD(Liquid Crystal Display,液晶顯示器)在近年來已廣

    為流行,亞洲地區亦因LCD等光電產業的蓬勃發展,成為全球主要的生產基地,

    因而在LCD構裝接合製程中,具備細線化、製程簡單、符合無鉛環保製程要求等

    特性的異方性導電膜(Anisotropic Conductive Film),需求量亦大增,其在電

    子產品的應用上,如玻璃覆晶(COG)、薄膜覆晶(COF)與LCD模組組裝等,有其優

    異之處。根據日本富士綜合研究所預估,異方性導電膠膜全球需求量在2002年

    已達到89百萬公尺,產值約249億日圓;2003年全球需求量將達到111百萬公

    尺之多,產值約297億日圓。而以應用市場來看,異方性導電膜有90%應用在LCD

    產業(驅動IC)上,應用比例分布如下:TAB製程上佔63%,COG製程佔18.2%,COF

    製程佔8.9%,其他約10%應用在IC構裝製程上。而異方性導電膜的主要需求市

    場,亦為日本、韓國、台灣、中國大陸等亞洲地區,其中日本市場佔全球規模的

    60%,因此日本亦成為全球異方性導電膜的主要生產地;然而國內近年來,在工

    業技術研究院帶領下,亦成功完成該材料的合成技術開發與應用產品製作,明年

    第三季開始量產後,我國就可以打破異方性導電膜全部仰賴日本進口的局面,屆

    時將開創了我國電子材料業嶄新發展的一頁。

    1.3研究目的及其重要性

    異方性導電膜主要的功能在於[1],提供兩種接合物體對於垂直方向的電導

  • 8

    通,而水平方向則具有絕緣效果;其主要由導電粒子與黏接劑(Binder)組成,藉

    由溫度、壓力、貼合位移的控制,使異方性導電膜之導電粒子破裂變形,而構成

    導通電路。然而,由於機台設備的差異、製程條件、導電膠材料的不同等因素,

    壓合後將造成導電粒子數量,以及破裂情況和其貼合位移量等各種偏差量,如圖

    1.7所示,六角形中間有黃色的金屬顏色,即表示ACF貼合位置有偏差,將會影

    響到整個LCD面板與其周邊控制電路之導通與否,進而造成壓著成功(OK)與失敗

    (NG)的結果,如圖1.8所示,故在導電粒子檢測技術上之研發設計,有其一定

    的必要性。而目前國內有在研發相關自動化ACF檢測平台的公司,並不普遍,

    雖然國外已有相關的機台,但因造價昂貴,並且檢測結果之良率並不高,所以目

    前國內在做導電粒子檢測時,幾乎都是以人工做計數判定。

    圖 1.7導電粒子壓合偏移

    圖 1.8導電粒子壓合成功與失敗

    因顯示器這類產品的製程繁瑣複雜、在製造過程中,常需仰賴大量的光學檢測裝

    置與影像處理系統的輔助,以提高產品的品質及良率的增加。目前這方面的研

  • 9

    究,希望藉由製造過程中的缺陷檢測,以提昇產品的良率,包含微粒檢測與電路

    製程不良等;而利用影像處理的輔助,來達成全自動化的生產線,都是目前這

    方面的研究重點。

  • 10

    第二章 理論基礎

    2.1導電粒子破裂特徵

    機台藉由溫度與壓力的控制,將使異方性導電膜之導電粒子,因壓合而破裂

    變形,進而構成導通電路,然而粒子破裂的變形程度,即需以某種物理量去做數

    據化的判斷分析,做此分析的意義在於粒子破裂的程度太低或太高,都可能造成

    該部位的導電效果不佳,進而導致面板與周邊控制元件的電路導通失敗,圖2.1

    即為某面板公司的導電粒子破裂變形規格參考資料。

    圖 2.1導電粒子破壞程度判定

  • 11

    2.2影像前處理

    2.2.1影像前處理_分辨標準量

    當導電粒子影像在進行骨架化處理之前,我們需對影像做二值化的處理,然

    而其閥值的選取,將牽動著二值化處理後的結果[1]。二值分劃之閥值k 將整個

    影像所有像素分成二部份 : C0 和C1,二個群集之

    變異數(variance) 分別是:

    然而

    其中 與 分別是群集中(within-class) 變異數、群集間(between-class)

    變異數及總(total) 變異數。亦可視為這些群集之面積形心與縱標軸之二次矩。為

    了找尋最佳閥值k,我們以分辨分析中之分辨標準量測來討論。定義參數:

  • 12

    則分辨準則(discriminant criterion) 是要使得λ、k和η為最大。

    求η為找出閥值κ最簡單的路徑。

    亦即

    最佳化閥值k*為

    由此,我們可由機率分佈求得二元影像之最佳閥值。最佳化閥值k* 亦可視

    為我們依此將影像分劃之後,二個部份群集C0 和C1 之面積形心與原始總群

    集的面積形心距離之二次矩將為最大值。

    2.2.2二值化

    在ACF影像前處理方面[2][3],因其影像品質、雜訊分布差異大,故我們

    通常使用灰階化、閉運算、分辨標準量二值化與改良式Prewitt遮罩,以及局部

    面積範圍限制等等做交替處理,以提升導電粒子影像與背景之對比度為原則。

    導電粒子影像在進行細線化處理之前,我們需對影像做二值化的處理。二值

    化之影像可將具有灰度值之影像經過處理而成,由於二值化影像較容易儲存、處

    理與辨認,因此二值影像信號處理在影像辨識處理中佔著重要的地位。

    當我們在進行影像處理時,若被處理的物體和不需要的背景能加以

    分離的話,將使我們方便許多,並更快處理速度。一張影像是由像素點

    所 構 成 的 二 圍 矩 陣 , 每 一 個 像 素 的 光 強 度 函 數 ( Light-Intensity

  • 13

    Function)以 f(x,y)表示之,俗稱為灰度值(Gray Level)或明亮度

    (Brightness),其中(x,y)為影像中的座標。一般灰度值的範圍如下:

    0≦f(x,y)≦255 (2.1)

    其中 0表示最暗或黑色,而 255表示最亮或白色。如圖 2.2所示的灰度

    分佈統計圖,為影像中的像素對應於 f(x,y)所產生的圖形,整幅影像

    就由亮的背景和暗的物體所組成,在兩個模式間存在一個臨界點 T(閥

    值),若我們想從背景中提出一個物體,即可以 T為判斷值,如果 f(x,

    y)<T則稱為物體點,否則為背景點。在本次專題實驗中,我們將臨界

    的 T值設為可調,以調整出最佳的分離狀況。

    圖 2.2灰度分佈統計圖

    一個二值化的影像 g(x,y)定義為

    1 f(x,y)>T

    g(x,y)= (2.2)

    0 f(x,y)≦T

  • 14

    影像中的像素若被視為 1 時即被視為背景,標記為 0 則被視為物體,

    因此在我們的實驗中,瞳孔的影像經二值化處理後就會清楚的與背景分

    離,以便演算法則判斷。其次,如圖 2.3 所示為光源對眼球影像的影響,

    圖 2.3(a)未加光源時,圖 2.3(b)則是加入光源後的影響。

    圖 2.3 (a)打光前之眼球影像的灰階亮度統計圖

    圖 2.3 (b)打光前後之眼球影像的灰階亮度統計圖

    2.2.3細線化

    在圖形識別時,細線化是一項很重要的方法[3],因為細線化的結果提供了

    一個簡化圖形的方法,細線化的意義就是將不等寬度的圖形或字體的周圍各點,

    經過多次循環的取捨,而留下寬度只有一個點素所連成的線,這樣可稱之為細線

    化或骨架化 (skeletonizing)。可以簡單定義O表示為物體,其外圍輪廓為B,

    在O內

    若能找到一個像素t,且在B上能找到兩個邊點,p1和p2,使得d(t, p1)= d(t, p1),

    則t就可為O的骨架中之一個元素。d(t, pi)為距離函數,1≦i≦2,表示像素t

    和邊點pi的距離,當然採用不同的距離函數會導致得到不同的骨架。

  • 15

    我們要處理的影像主要為二值化後的影像,處理方法像剝洋蔥的方式,由

    外往內做處理;首先以一個3×3的遮罩來看,當其在一個3×3的子影像像素上如

    圖 2.4所示;以 Z5為中心,八個鄰近像素中非零像素個數記為 N(Z5)。

    圖 2.4 3×3子影像

    例如當Z1=0、Z2=0、Z3=1、Z3=1、Z4=1、Z6=1、Z7=1、Z8=0和Z9=1時,則

    N(Z5)=5。其中,像素灰階值等於0,代表該像素為一黑色像素,像素灰階值等

    於1,代表該像素為一白色像素;接著再考慮Z5的八個鄰近像素,以Z1為出發

    點,沿著順時針方向回到Z1,計算像素灰階值由0變到1的次數,記為T(Z5),

    T(Z5)=2。

    然而當N(Z5)=0或1時,亦即代表像素Z5的八個鄰近像素中,所有像素皆

    為白色像素,或只有一個像素為黑色像素;因此Z5可能為孤立點或最外圍的端

    點。而無論Z5是孤立點或端點,Z5都不該被除掉,也就是N(Z5)=1時,Z5不必

    改成0;而當N(Z5)=0時,我們本來就不做任何處理。換言之,當2≦N(Z5)≦6

    時且Z5=1時,Z5需進一步做處理,已判定Z5是否要改為0。

    假設2≦N(Z5)≦6的條件成立時,若T(Z5)=1也成立,則Z5=1時,Z5很有

    可能被改為0;為了怕Z5被改成0之後,對物體的細化將產生凹陷的情況發生,

    我們另外加了兩個條件Z2.Z6.Z8=0以及Z2.Z4.Z6=0,防止去除黑色像素Z5

  • 16

    會造成往北方和東方凹陷的現象;綜合以上分析,我們以四個式子來決定Z5是

    否要改為灰階值為0的黑色像素。

    (1) 2≦ N(Z5)≦ 6

    (2) T(Z5) = 1

    (3) Z2.Z6.Z8= 0

    (4)Z2.Z4.Z6= 0

    則以上四式同時成立時,且Z5=1時,Z5將會改成0。

    然而細化處理時,仍需考慮到物體細化的對稱性,式(2.34)四個式子中的(3)

    式與(4)式偏向以東南方的方向進行細化處理,因此為平衡細化後的骨架,我們

    可交替進行西方和北方的細化工作,其相關的四個判斷式如下:

    (1) 2≦ N(Z5)≦ 6

    (2) T(Z5) = 1

    (3) Z4.Z6.Z8= 0

    (4)Z2.Z4.Z8= 0

    實際進行細化物體時,我們在物體的最外圍開始依式()進行細化的處理,再

    依式()進行另兩個方向的細化工作;主要利用此二式交替運算,不斷的在物體外

    圍進行細化的動作,直至物體骨架剩下1像素的寬度,則骨架化的動作才結束。

    圖2.5(a)、2.5(b)為兩種細線化的實作例;而圖2.5(c)為圖2.5(b)轉換為紅色線

    條並與圖2.5(a)重疊,可以看出細化後的骨架,皆分布於原圖2.5(a)橢圓白色輪

    廓中。

  • 17

    圖2.5(a)橢圓

    圖2.5(b)細化後的橢圓骨架

    圖 2.5(c)圖 2.5(a)與圖 2.5(b)重疊

  • 18

    2.3邊界搜尋法

    邊界搜尋方法是為了從二值化影像中獲得邊緣的連接資訊[4],也就是獲得一

    個串列的資料結構,本節將介紹兩種邊界搜尋方法,第一種是利用一個Mask去檢

    查邊界出現的位置,並且只能往上、下、左、右某一個方向前進而不能後退,所以

    本專題暫且稱這種搜尋方法叫作「前進邊緣搜尋法」。 第二種邊緣搜尋法,想法是

    來自於一顆球在邊界上滾動所獲得的邊界資訊,並且是利用「1 個pixel大小的球」

    來做邊界搜尋,簡稱作「八鄰接點搜尋法」,。

    2.3.1前進邊緣搜尋法

    圖2.6為一個向下搜尋的搜尋視窗,假若p是在一個二值影像邊界上某一點

    (所以p 位置在影像上的強度值為 255),當我們想向下搜尋接下來的邊界資訊

    時,p會依照搜 尋視窗中的數字優先順序,檢查是否有邊界資訊(強度為0 代表

    沒有邊界;強度為255表示有邊界),然後將p移動到新的位置上,重覆再做同樣

    的動作,就能將邊緣往下搜尋出來[5],界定一個長度,就能獲得一個Shape資訊。

    圖2.7為一個45 的搜尋視窗,仔細觀察內部的優先順序,就能了解它主要是向

    下搜尋,並且只能前進不會後退,同理 我們也能做出往上、左、右方向的搜尋。

    此搜尋法的優點是對於斷掉的邊界可能有機會找得到下一點的連接資訊 ,但此

    搜尋法也有它精準度不夠、只能往上下左右四個方向。

    圖2.6前進邊緣搜尋法,向下搜尋示意圖

  • 19

    2.3.2八鄰接點搜尋法

    八鄰接點搜尋法是利用一個33的Mask,依據球是順時針(CW)或逆時針

    (CCW)方向旋轉滾動來將邊界追蹤出來。假設圖2.7左邊是二值影像的一部分,其

    中s可以想像是一顆球,t 所在的位置是有邊緣的(黑色)[6],如果s做逆時針方向滾

    動,我們可以想像這顆球所獲得的接觸路徑,就如同圖2.7右邊中pixel為1 所顯示

    的路徑,E代表結束。

    圖2.7原始影像(左)與追蹤結果(右)示意圖

    以圖2.8為例子來說明。一開始,需先在邊緣上(圖中pixel為黑色的部分)找到

    一點 t作為邊緣追蹤的起始點,再來將「虛擬滾動球s」放在t的4鄰域上,圖中我

    們將s放在t的右邊,因為想讓s這顆球往逆時針旋轉滾動得到圖2.8右邊的邊緣。

    如果我們要讓滾球逆時針旋轉,那就套用圖2.8的逆時針Mask (圖2.9右

    邊),將 Mask的中心t對應至圖2.8的t位置,然後將s在Mask上所對應的箭頭方

    向移動(每次移 動一個pixel,例如當s在↑的位置就將s往上移動格;s在←的

    位置就將s往左移動格), 假若s移動到的新位置是在邊緣上,s就不要更新到

    新位置,而讓t移動到該位置,新的 t位置就是下一個追蹤到的邊緣;否則s繼

    續沿著Mask對應的方向移動,直到它落在邊緣上。

  • 20

    重覆上一段的動作直到所追蹤出來的邊緣長度達到要求,如圖2.8右邊的E

    代表終止位置。

    圖2.8八鄰接點搜尋Mask,左為順時針,右為逆時針

  • 21

    第三章 實驗結果與討論

    3.1系統執行流程

    (一)以二值化比對法的設計為主,先對ACF影像做分析處理,計算出各個

    區塊子影像的RGB灰階值資訊,再對其做各種影像運算處理,其中包含

    忽略灰階值的設定、利用局部面積範圍限定的方法,濾除掉其餘的雜訊,

    最終將再做各單位區塊影像差異度的計算 ,進而找出吻合的目標影像。

    (二)以分析導電粒子破裂特徵為目的,除了會先對待測影像做各種降低

    雜訊,提高影像對比度的前處理運算外,還會有經由選取複數樣板,對待

    測影像執行多重比對的運算功能。圖3.1所示為系統流程圖。

  • 22

    圖3.1系統流程圖

  • 23

    3.2影像前處理

    在ACF 影像前處理方面[7],因其影像品質、雜訊分布差異大,故我

    們通常使用灰階化、閉運算、分辨標準量二值化 , 以及局部面積範圍限制

    等等做交替處理,以提升導電粒子影像與背景之對比度為原則 ;圖3.2前

    處理系列 (一 )中,由左至右的前處理流程分別為,原始影像、分辨標準量

    二值化、閉運算,處理完後可發現主要的導電粒子圖像已與背景分離,

    形成二值化的影像,然後再利用局部面積範圍限定的方法,濾除掉其餘

    的雜訊。

    圖3.2影像前處理(一),此為導電粒子正面取像

    而圖3.3 前處理系 (二 )中,由左至右的前處理流程分別為,原始影像、

    灰階化、Prewitt 遮罩運算,為導電粒子圖像進行骨架化前的必須處理流

    程,各個導電粒子圖像經 Prewitt 遮罩處理後[9],再使用分辨標準量的方

    法,所得到的二值化影像。

  • 24

    圖3.3影像前處理(二),此為導電粒子反面取像

    3.3研究正、反面取像及實驗

    在這節我們分二個系統做說明與實驗,系統(一)為正面取像部份及系統(二)

    為反面取像部份。

    3.3.1正面取像

    一開始先放入ACF正面取像的圖,如圖3.4所示,接著對它做灰階這個步驟,

    如圖3.5所示。

    (a)灰階

    圖3.4導電粒子原影像

  • 25

    圖3.5灰階的影像

    (b)二値化

    接著將影像做二值化的動作如圖3.6所示,我們把二値化閥值設為84。

    圖3.6二値化的影像(一)(閥值為84)

  • 26

    (c)導電粒子數(程式請參閱附錄1)

    以局部面積範圍限制法去除掉雜質,在利用檢測邊緣像素灰度值差異

    的方法找出導電粒子,進而算出導電粒子數如圖3.7。

    圖3.7導電粒子數為17個(搜尋面積範圍150~500個Pixel)

    (d)面積、周長及破裂比質(程式請參閱附錄2)

    在進行粒子破裂情況判斷時,會利用檢測邊緣像素灰度值差異的方

    法,搜尋計算並標記出邊緣長度,並計算邊緣內所包含的面積,求取出粒

    子的邊緣長度與面積之比值,進而進行粒子破裂情況的結果判斷如圖3.8。

    粒子的邊緣長度與面積之比值如下 :

    A

    ls

    PS.其中 l 為粒子周長,A 為粒子面積。

  • 27

    圖3.8各區域面積與周長以及破裂比質,並顯示導電粒子好壞

    3.3.2反面取像

    下圖3.9所示為原ACF影像,我們從中擷取解析度256×256×24bits的圖檔下

    來,如圖中紅框線所標示,取來做為實驗影像。

    圖3.9 ACF影像

  • 28

    (a)灰階及邊緣偵測

    原影像轉成灰階圖時,灰階度將紅、綠、藍三原色依照以下的比例混合而成:

    W = 0.30R + 0.59G + 0.11B

    其中:

    W:灰階亮度

    R:該顏色的紅色亮度

    G:該顏色的綠色亮度

    B:該顏色的藍色亮度

    如此,原影像裡的白色還是白色,黑色還是黑色,而其它顏色則會依比例混成灰

    階色,圖 3.10為導電粒原子影像及灰階後的影像,圖 3.11為導電粒子原影像及

    邊緣偵測的影像。

    圖3.10導電粒原子影像(左)及灰階的影像(右)

  • 29

    圖3.11導電粒子原影像(左)及邊緣偵測的影像(右)

    (b)二値化

    接著將影像做二值化的動作如圖3.12所示,我們把二値化閥值設為198。

    圖3.12二値化的影像(二)(閥值為198)

  • 30

    (c)標記導電粒子數及面積(程式請參閱附錄3、4)

    要抓相同的一區塊可用四相鄰與八相鄰的方法,以一個 3×3的 mask來說,

    標示如下圖 3.13:

    圖 3.13 3×3的 mask

    以 5為中心且採用四相鄰來說,以5的灰階值為準且設定一個門(threshold),

    如加減1、0的灰階值,只要2、4、6、8四格中有符合門檻值則其與中心5

    為相鄰,則可判定為同一區塊,下圖 3.14為 3×3mask的四相鄰示意圖。

    圖 3.14四相鄰示意圖

    以八相鄰來說,則是取1、2、3、4、6、7、8、9八格來計算,找到一個

    相鄰點時,再將中心移到該點再做四相鄰或八相鄰當全部做完時,則可找出區塊

    的位置和所佔面積等,下圖 3.15為 3×3mask的八相鄰示意圖。

    圖3.15八相鄰示意圖

  • 31

    研究是以局部面積範圍限制法去除掉雜質,再以邊界判斷法找到一個

    相鄰點時,將中心移到該點做八相鄰搜尋,且是以逆時針方向做實驗,

    當全部做完時,則可找出區塊的位置,及所佔面積等,如圖 3.16 所示為

    程式八相鄰搜尋法座標示意圖。

    (x , y) (x + 1, y) (x + 1, y- 1)

    (x , y- 1) (x- 1, y- 1) (x- 1, y)

    (x- 1, y + 1) (x, y + 1) (x + 1, y + 1)

    圖3.16八相鄰搜尋法座標示意圖

    而程式是利用遞迴方式,先將圖形載入BMP->Assign(Image2->Picture->Bitmap);

    再利用二個 FOR迴圈來一個個掃描圖形 ptr = (Byte*) BMP->ScanLine[y];擷

    取 PIXEL值到 ptr中,主要是針對原本二值化影像白色部份做標籤化,若其中有

    一個值為255(白色),就進行八相鄰的檢查找出連續的區塊,呼叫 connect

    就是要找連續區塊,而 connect中再呼叫 connect就是以遞迴方法來處理尋找連

    續區塊,如圖 3.17為粒子數目及各區域所佔面積的實驗結果。

  • 32

    圖3.17導電粒子數為17個與各區面積(搜尋面積範圍9~130個Pixel)

  • 33

    3.4實驗結果分析及討論

    3.4.1正面取像討論

    根據表 3.1的面積(pixel)、周長(pixel)數據,以周長對面積求取比質,所

    求得的數值進而再判斷導電粒子 Excellent、Good、或 Failure如表 3.2所示即

    為導電粒子破壞程度判定。圖 3.18 為導電粒子破壞率對照圖。

    表 3.1面積、周長、比値

    表3.2粒子缺損率分析

    缺損率(%) 個數(個) 導電粒子判斷

    80 ~ 100 4 Failure60 ~ 80 8 Good40 ~ 60 4 Excellent20 ~ 40 7 Excellent0 ~ 20 0 Failure

    面積(Pixel) 周長(Pixel) 比質(周長/面積)

    164 52 0.317073166370392246 72 0.29268291592598294 88 0.299319714307785285 69 0.242105260491371334 76 0.227544903755188215 73 0.339534878730774224 54 0.241071432828903413 88 0.213075056672096308 89 0.288961052894592182 77 0.423076927661896336 75 0.223214283585548302 83 0.274834424257278352 75 0.213068187236786288 72 0.25345 83 0.240579709410667175 79 0.451428562402725155 81 0.522580623626709197 103 0.522842645645142

  • 34

    圖3.18導電粒子損毀率對照圖

    3.4.2反面取像討論

    以邊界判斷法找到一個相鄰點時,再將中心移到該點再做八相鄰搜

    尋,當全部做完時,則可找出區塊的位置及所佔面積。

    表3.3標記區域與顯示面積

    圖3.19標記區域與顯示面積

    區域 面積(Pixel)

    第 1 46

    第 2 39

    第 3 71

    第 4 20

    第 5 99

    第 6 37

    第 7 55

    第 8 32

    第 9 11

    第 10 58

    第 11 19

    第 12 48

    第 13 62

    第 14 20

    第 15 68

    第 16 69

    第 17 22

  • 35

    第四章 結論

    4.1結論

    本研究是以 Borland C++ 6.0 為軟體開發環境,主要是以影像處理為

    觀點,整合光學取像系統、二質化處理、影像前處理、特徵抽取、型樣

    特徵匹配,完成一 LCD 面板之 ACF 影像導電粒子檢測系統。以下就本

    研究經測試所獲得的結果,總結出下面幾點結論:

    本研究針對 LCD 面版之 ACF 影像種類,進行導電粒子圖像資料庫

    的建構,規劃出一套在特徵描述與比對上,二質化則採用 R、G、B 三

    平面的資訊,綜合參考比對的方式,來達到快速的搜尋比對。

    在圓週跟週長的設定分析上,能夠以任意形狀的矩陣設定配合忽略灰

    階值的矩陣,將樣板局部區塊予以忽略計算,大為提升了系統的執行效

    能,亦搭配了任意特徵權重矩陣的分析設定,將辨識比對的誤判情形大

    為降低。

    在不規則圖形的搜尋上,使用影像分析的觀念,能夠調整找到的目標

    樣板影像 (從 y 軸開始抓值 ),是否合適,並以複數的區塊樣板與導電粒子

    影像樣板,對待測影像做同步的多重比對辨識。

    以有效的數種影像前處理技術,降低複雜的 ACF 影像雜訊,有效提

    高目標物與背景的對比度,增進了系統比對搜尋的穩定度與正確性

  • 36

    參考文獻

    [1]. F. G. Shi, M. Abdullah, S. Chungpaiboonpatana, K. Okuyama, C.

    Davidson, J. M.Adams, ” Electrical conduction of anisotropic

    conductive adhesives: effect ofsize distribution of conducting

    filler particles”, Materials Science inSemiconductor Processing,

    Vol.2, pp.263-269, 1999.

    [2].二值影像之改良型細線化演算法 [[微縮資料]] /林志勇撰

    [3].二值化影像雜訊清除及細線化之快速方法 梁立信[撰]

    [4].Sahoo, P.K., et al., "A Survey of Thresholding Techniques", Computer,

    Vision, Graphics, and Image Processing 41, pp.233-260, 1988.

    [5].Otsu, N., "A Threshold Selection Method from Gray-Level Histograms",

    IEEE Transactions on Systems, Man, and Cybernetics, Vol. SMC-9, NO.1,

    pp.62-66,1979.

    [6].Chern-Sheng Lin, Rong-Seng Chang, I-Liang Chih, "Digital Image,

    Processing for Evaluating the Quality of the Film of a Holographic

    Plate", SPIE 2404-41, 1995

    [7].Ragael C. Gonzalez, Richard E. Woods, "Digital Image Processing",

    1987.

    [8].Kuo H.T., Chin J.H., "Tool Wear Inspection using Image Processing

    Technique.", 1991.

    [9].衛祖賞,"數位影像處理",全華圖書,1982.

  • 37

    附錄

    附錄1程式(一)

    {

    //計算導電粒子數

    int f=0,g=0,h=0,i,j,x,y,p=0,q=0,r=0,s=0,x0,y0,xx,yy,have=0;

    int flag=1;

    Byte *ptr1, *ptr2, *ptr3, *ptr_1, *ptr_2, *ptr_3, *ptr_4, *ptr_5;

    Bitmap2->Assign(Image1->Picture);

    while(1)//以滾球法搜尋

    {

    x=1;

    y=1;

    ptr1=(Byte *)Bitmap2->ScanLine[y];

    while(ptr1[x*3]!=255)

    {

    if(x==Bitmap2->Width-2 && y==Bitmap2->Height-2)

    {

    have=1;

    break;

    }

    if(x==Bitmap2->Width-1)

    {

    x=0;

    y++;

    }

    x++;

    ptr1=(Byte *)Bitmap2->ScanLine[y];

    }

    if(have==1)

    {

    break;

    }

    y0=y;

    ptr1[x*3]=flag;

    ptr1[x*3+1]=flag;

    ptr1[x*3+2]=flag;

    for(y=y0;yHeight-2;y++)

  • 38

    {

    ptr2=(Byte *)Bitmap2->ScanLine[y];

    for(x=1;xWidth-2;x++)

    {

    if(ptr2[x*3]==flag)

    {

    for(j=y-1;jScanLine[j];

    for(i=x-1;iScanLine[y];

    for(x=Image1->Width-2;x>=1;x--)

    {

    if(ptr2[x*3]==flag)

    {

    for(j=y-1;jScanLine[j];

    for(i=x-1;i

  • 39

    flag++;

    }

    for(i=1;iScanLine[y];

    for(x=0;xWidth-1;x++)

    {

    if(ptr_3[x*3]==i)

    {

    h++;

    }

    }

    }

    if(hText)//設定面積的範圍

    {

    g++;

    for(y=0;yHeight-1;y++)

    {

    ptr_3=(Byte *)Bitmap2->ScanLine[y];

    for(x=0;xWidth-1;x++)

    {

    if(ptr_3[x*3]==i)//設定導電粒子數的顏色

    {

    ptr_3[x*3]=0;

    ptr_3[x*3+1]=0;

    ptr_3[x*3+2]=0;

    }

    }

    }

    }

    else if(h>Edit4->Text)//設定面積的範圍

    {

    f++;

    for(y=0;yHeight-1;y++)

    {

    ptr_3=(Byte *)Bitmap2->ScanLine[y];

    for(x=0;xWidth-1;x++)

    {

    if(ptr_3[x*3]==i)

  • 40

    {

    ptr_3[x*3]=0;

    ptr_3[x*3+1]=0;

    ptr_3[x*3+2]=0;

    }

    }

    }

    }

    h=0;

    }

    for(j=1;jScanLine[y];

    for(x=0;xWidth-1;x++)

    {

    if(ptr_4[x*3]==j)

    {

    ptr_4[x*3]=255;

    ptr_4[x*3+1]=255;

    ptr_4[x*3+2]=255;

    }

    }

    }

    }

    Edit1->Text=flag-g-f; //去除雜訊進而算出有幾個導電粒子數

    Image1->Picture->Assign(Bitmap2);

    }

  • 41

    附錄 2程式(二)

    {

    //計算面積和周長並求取破裂比質

    //Bitmap1->Assign(Image1->Picture);

    int f=0,g=0,h=0,i,j,x,y,p=0,q=0,r=0,s=0,x0,y0,xx,yy,have=0,area=0,carea=0,count=0;

    int z=0,k=0,m=0,v=0,l=0;

    int flag=1;

    Byte *ptr1, *ptr2, *ptr3, *ptr_1, *ptr_2, *ptr_3, *ptr_4, *ptr_5;

    Bitmap2->Assign(Image1->Picture);

    //Bitmap2->Height=Image1->Height;

    //Bitmap2->Width=Image1->Width;

    while(1) //以滾球法搜尋PIXEL值

    {

    x=1;

    y=1;

    ptr1=(Byte *)Bitmap2->ScanLine[y];

    while(ptr1[x*3]!=255)

    {

    if(x==Bitmap2->Width-2 && y==Bitmap2->Height-2)

    {

    have=1;

    break;

    }

    if(x==Bitmap2->Width-1)

    {

    x=0;

    y++;

    }

    x++;

    ptr1=(Byte *)Bitmap2->ScanLine[y];

    }

    if(have==1)

    {

    break;

    }

    y0=y;

    ptr1[x*3]=flag;

    ptr1[x*3+1]=flag;

    ptr1[x*3+2]=flag;

    for(y=y0;yHeight-2;y++)

    {

  • 42

    ptr2=(Byte *)Bitmap2->ScanLine[y];

    for(x=1;xWidth-2;x++)

    {

    if(ptr2[x*3]==flag)

    {

    for(j=y-1;jScanLine[j];

    for(i=x-1;iScanLine[y];

    for(x=Image1->Width-2;x>=1;x--)

    {

    if(ptr2[x*3]==flag)

    {

    for(j=y-1;jScanLine[j];

    for(i=x-1;i

  • 43

    }

    for(i=1;iScanLine[y];

    for(x=0;xWidth-1;x++)

    {

    if(ptr_3[x*3]==i)

    {

    h++;

    }

    }

    }

    h=0;

    }

    for(j=1;jScanLine[y];

    for(x=0;xWidth-1;x++)

    {

    if(ptr_4[x*3]==j)

    {

    ptr_4[x*3]=255;

    ptr_4[x*3+1]=255;

    ptr_4[x*3+2]=255;

    area++; //算出的共有幾個PIXEL

    }

    }

    }

    Byte *ptr, *ptr_up, *ptr_down;

    //先對左右做邊緣化,算出變紅色的PIXEL值有多少個就是周長

    for(y=0;yHeight-1;y++)

    {

    ptr=(Byte *)Bitmap2->ScanLine[y];

    for(x=0;xWidth-2;x++)

    {

    if( (ptr[x*3]-ptr[(x+1)*3])&&(ptr[x*3+1]-ptr[(x+1)*3+1])&&(ptr[x*3+2]-ptr[(x+1)*3+2])==-255 )

    {

  • 44

    ptr[(x+1)*3]=0;

    ptr[(x+1)*3+1]=0;

    ptr[(x+1)*3+2]=255;

    count++;

    }

    if( (ptr[x*3]-ptr[(x+1)*3])&&(ptr[x*3+1]-ptr[(x+1)*3+1])&&(ptr[x*3+2]-ptr[(x+1)*3+2])==255 )

    {

    ptr[(x)*3]=0;

    ptr[(x)*3+1]=0;

    ptr[(x)*3+2]=255;

    count++;

    }

    }

    }

    //再對上下做邊緣化,算出變紅色的PIXEL值有多少個就是周長

    for(y=0;yHeight-2;y++)

    {

    ptr_up=(Byte *)Bitmap2->ScanLine[y];

    ptr_down=(Byte *)Bitmap2->ScanLine[y+1];

    for( x=0;xWidth-1;x++ )

    {

    if( (ptr_up[x*3]-ptr_down[x*3])&&(ptr_up[x*3+1]-ptr_down[x*3+1])&&(ptr_up[x*3+2]-ptr_down[x*3+2])==255 )

    {

    ptr_up[x*3]=0;

    ptr_up[x*3+1]=0;

    ptr_up[x*3+2]=255;

    count++;

    }

    if( (ptr_up[x*3]-ptr_down[x*3])&&(ptr_up[x*3+1]-ptr_down[x*3+1])&&(ptr_up[x*3+2]-ptr_down[x*3+2])==-255 )

    {

    ptr_down[x*3]=0;

    ptr_down[x*3+1]=0;

    ptr_down[x*3+2]=255;

    count++;

    }

    }

    }

    if(area!=0)

    {

  • 45

    float value = (float)count/area;//比值

    Memo1->Lines->Add(area);

    Memo2->Lines->Add(count);

    Memo3->Lines->Add(value);

    if ( value0.2 && value0.25 && value0.3 && value0.35)

    {

    l+=1;

    }

    value=0;

    area=0;

    count=0;

    carea++;

    }

    }

    Edit5->Text=z;

    Edit7->Text=k;

    Edit8->Text=m;

    Edit9->Text=v;

    Edit6->Text=l;

    Image1->Picture->Assign(Bitmap2);

    }

  • 46

    附錄 3程式(三)

    { int count = 0;

    int Connect(Graphics::TBitmap *BMP, int x, int y)

    {

    count++;

    //■■■

    //■□■

    //■■■

    BMP->Canvas->Pixels[x][y] = TColor(0x00000000);

    //■■■

    //■■□

    //■■■

    if(BMP->Canvas->Pixels[x + 1][y] == TColor(0xFFFFFFFF))

    Connect(BMP, x + 1, y);

    //■■□

    //■■■

    //■■■

    if(BMP->Canvas->Pixels[x + 1][y- 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x + 1, y- 1);

    //■□■

    //■■■

    //■■■

    if(BMP->Canvas->Pixels[x][y- 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x , y- 1);

    //□■■

    //■■■

    //■■■

    if(BMP->Canvas->Pixels[x- 1][y- 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x- 1, y- 1);

    //■■■

    //□■■

    //■■■

    if(BMP->Canvas->Pixels[x- 1][y] == TColor(0xFFFFFFFF)

    Connect(BMP, x- 1, y);

    //■■■

    //■■■

    //□■■

  • 47

    if(BMP->Canvas->Pixels[x- 1][y + 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x- 1, y + 1);

    //■■■

    //■■■

    //■□■

    if(BMP->Canvas->Pixels[x][y + 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x, y + 1);

    //■■■

    //■■■

    //■■□

    if(BMP->Canvas->Pixels[x + 1][y + 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x + 1, y + 1);

    return (count);

    };

    //計算導電微粒子數

    int c = 0;

    Graphics::TBitmap *BMP = new Graphics::TBitmap();

    Byte *ptr=NULL;

    BMP->Assign(Image2->Picture->Bitmap);

    for(int y = 0; y < BMP->Height; y++)

    {

    ptr = (Byte *) BMP->ScanLine[y];

    for(int x = 0; x < BMP->Width; x++)

    {

    if(ptr[x * 3] == 255)

    {

    int cx= Connect(BMP, x, y);

    count=0;

    if (cx>=Edit3->Text && cxText)

    c+=1;

    }

    }

    }

    Edit2->Text=c;

    delete BMP;

    }

  • 48

    附錄 4程式(四)

    {

    //標記及求各區面積

    int count = 0;

    int Connect(Graphics::TBitmap *BMP, int x, int y)

    {

    count++;

    //■■■

    //■□■

    //■■■

    BMP->Canvas->Pixels[x][y] = TColor(0x00000000);

    //■■■

    //■■□

    //■■■

    if(BMP->Canvas->Pixels[x + 1][y] == TColor(0xFFFFFFFF))

    Connect(BMP, x + 1, y);

    //■■□

    //■■■

    //■■■

    if(BMP->Canvas->Pixels[x + 1][y- 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x + 1, y- 1);

    //■□■

    //■■■

    //■■■

    if(BMP->Canvas->Pixels[x][y- 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x , y- 1);

    //□■■

    //■■■

    //■■■

    if(BMP->Canvas->Pixels[x- 1][y- 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x- 1, y- 1);

    //■■■

    //□■■

    //■■■

    if(BMP->Canvas->Pixels[x- 1][y] == TColor(0xFFFFFFFF)

    Connect(BMP, x- 1, y);

    //■■■

  • 49

    //■■■

    //□■■

    if(BMP->Canvas->Pixels[x- 1][y + 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x- 1, y + 1);

    //■■■

    //■■■

    //■□■

    if(BMP->Canvas->Pixels[x][y + 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x, y + 1);

    //■■■

    //■■■

    //■■□

    if(BMP->Canvas->Pixels[x + 1][y + 1] == TColor(0xFFFFFFFF)

    Connect(BMP, x + 1, y + 1);

    return (count);

    };

    //---------------------------------------------------------------------------

    Memo1->Clear();

    int c = 0;

    Graphics::TBitmap *BMP = new Graphics::TBitmap();

    Byte *ptr=NULL;

    BMP->Assign(Image2->Picture->Bitmap);

    for(int y = 0; y < BMP->Height; y++)

    {

    ptr = (Byte *) BMP->ScanLine[y];

    for(int x = 0; x < BMP->Width; x++)

    {

    if(ptr[x * 3] == 255)

    {

    int cx= Connect(BMP, x, y);

    //Memo1->Lines->Add(cx); //顯示每次計算的結果(物件所佔的像素數)

    count=0; //歸0用

    if (cx>=Edit3->Text && cxText)//像素>=9 && Lines->Add("第 "+(String)c+"個區域 ,有 "+(String)cx+" Pixel"); //顯示每次計算的結果

    (物件所佔的像素數)

    //break;

    Image2->Canvas->TextOut(x-20,y-8,c);

    }

  • 50

    }

    }

    }

    //ShowMessage(AnsiString("共有")+c+AnsiString("區域!"));

    delete BMP;

    }