
万能电子系周建兴.ppt
48页按一下以編輯母片標題樣式,,按一下以編輯母片文字樣式,,第二層,,第三層,,第四層,,第五層,,*,,*,,,,,,按一下以編輯母片標題樣式,,按一下以編輯母片文字樣式,,第二層,,第三層,,第四層,,第五層,,*,,*,,,,,,按一下以編輯母片標題樣式,,按一下以編輯母片文字樣式,,第二層,,第三層,,第四層,,第五層,,*,,*,,,,,按一下以編輯母片標題樣式,,按一下以編輯母片文字樣式,,第二層,,第三層,,第四層,,第五層,,*,,*,,,,,,按一下以編輯母片標題樣式,,按一下以編輯母片文字樣式,,第二層,,第三層,,第四層,,第五層,,*,,*,萬能電子系,,數位影像處理教學程式,1,,開發環境介紹,使用軟體,Borland C++ Builder 6.0,以上版本,,個人電腦一台,,程式網址,,請下載,Image4c.rar,,並解壓縮執行,2,,程式畫面,點擊,projext1.exe,執行檔,3,,軟體功能簡介,開啟影像檔程式請看,>Open Image,,儲存影像檔程式請看,>Save Image,,,,量化程式,(Quantization),,32 Color ->,量化成,32,色,,8 Color ->,量化成,8,色,,2 Color ->,量化成,2,色,,4,,練習開啟與儲存影像檔案,5,,練習用程式轉成,2,色影像,6,,空間頻域之影像處理方法,Darker ->,變暗,,Lighter ->,變亮,,Inverse ->,反相,,Histogram Equalization - >,長條圖等化,,Thresholding ->,取閥值做二值化處理,(,修改數值會有不同的結果,),,Thresholding AutoSelecting ->,程式自行選取適當的閥值做二值化處理,(,可用,H.bmp,這張圖測試,),,7,,練習將影像變暗,8,,練習將影像做反相,9,,反相影像,10,,練習長條圖等化,11,,濾波器處理方法,(Filter),Lowpass Filter ->,低通濾波器,,Highpass Filter - >,高通濾波器,,Medium Filter ->,中值濾波器,(,可用,Lena-noise.bmp,這張圖測試,),,Sobel Filter ->,找,Edue(,邊緣,) (,修改數值會有不同的結果,),,12,,開啟被刮傷的影像,13,,使用低通濾波器(模糊化),14,,使用中值濾波器處理受損影像,15,,開啟,H.bmp,檔案,16,,使用高通濾波器顯示邊界,17,,使用,SOBEL,濾波器找邊界,18,,描述方法,(Representation),Thinning ->,細化,(,可用,H.bmp,先取閥值後 在對這張圖做細化,,,還原原始檔案,->,點選,",還原原始檔案,",的按鈕 即可還原成原始影像,),19,,程式中的參數說明,,Image_Width,開啟影像的寬度,,Image_Height,開啟影像的高度,,Data[][],儲存開啟影像與用來進行運算的陣列,此陣列為二維陣列,,Data[Image_Width][Image_Height],,第一維的大小是,Image_Width,第二維的大小是,Image_Height,,20,,副函式說明如下,GetBitmap( ),,,將影像的資料讀進預先宣告的,Data[][],陣列,,SetBitmap( ),,將,Data[][],陣列中的資料 儲存到原始影像中 並顯示在圖片上,,Retrieve( ),,將,Data[][],陣列中的資料還原回原始影像中的資料,,21,,練習用,Borland C++ 2009,修改程式,先用,BCB,打開專案檔,22,,作業一:寫一個反相功能的程式,開啟後,請先點,Run,執行程式一次。
然後關閉執行的程式,23,,作業一,點選,unit.cpp,24,,作業一,點,Design,,打開程式的,Form,25,,作業一,點,Main Menu1,26,,作業一,點,main menu,空白處,來新增一個新的功能,在左邊,caption,處取名為作業,1,27,,作業一,按下,ENTER,後,點作業,1,就會連結到可以寫程式的地方,28,,作業一,反相的原理,便是黑變白,白變黑,,公式為 (假定為,256,色灰階影像,),,,,反相後的數值,= 255-,目前灰階值,,,影像的寬度會儲存在,Image_Width,,而影像的高度會儲存在,Image_Height,,因此利用兩個,for,迴圈,將每個像素的影像值予以更改,29,,作業一,程式範例,,,for(int i = 0; i < Image_Width; i++),,for(int j = 0; j < Image_Height; j++),,Data[i][j] = 255 - Data[i][j];,,SetBitmap();,,,SetBitmap,是在像素值都被修改後,用來顯示影像的函示30,,作業一,寫好的程式碼,,然後按,Run(F9),執行程式,31,,作業一,程式若沒有寫錯,執行的介面會出現一個新的作業,(1),按鍵。
開啟一張影像作測試,32,,程式執行結果,33,,作業二:寫一個簡易的變亮處理,同樣的步驟,先做出作業二的按鈕,34,,作業二:寫一個簡易的變亮處理,簡易的變亮方法,就是增加每個像素的灰階影像數值例如:變量後數值,=,原始灰階值,+40,,,但是要注意影像數值不可超過,255,,因此要用,IF,判斷式,將大於,255,的數值改為,255,,35,,作業二:寫一個簡易的變亮處理,程式範例,,,for(int i = 0; i < Image_Width; i++),,for(int j = 0; j < Image_Height; j++)\,,{,,Data[i][j] = Data[i][j]+40;,,if(Data[i][j] >255),,Data[i][j] = 255;,,},,SetBitmap();,36,,作業二:寫一個簡易的變亮處理,點擊作業二後,輸入程式碼然後執行程式37,,作業二:寫一個簡易的變亮處理,38,,執行結果,39,,作業討論,如果增加,40,改為增加,20,或,80,,會有什麼不同?,,,作業三:請製作一個簡易的變暗處理程式提示:將影像灰階值變小,並大於,0),,,請自行練習作業三。
40,,作業四:做影像左右翻轉(鏡射),將影像左右不同位置像素的灰階值,做調換41,,作業四:,重點一:,,交換程式:假設,a=5, b=3,a,b,兩個變數要交換,,程式:,,int temp = a;,,a=b;,,b=temp;,,,temp,的功用是暫時儲存,a,的數值,等到,b,的值給,a,後,便可將暫存於,temp,值,儲存給,b,42,,作業四:,重點二:如果矩陣中有,十,個數值要兩兩交換,,,則只需要交換,五,次即可也就是一半的次數),43,,作業四:,先點右邊,Standard,,在,TButton,點一下,,然後在,Design,上點一下新增一個按鈕,44,,作業四:,將按鈕更名為作業四,並點擊後撰寫程式45,,作業四:,程式碼,,Image_Width要改成Image_Width/2,,46,,作業五:垂直翻轉,迴圈中,調換的是垂直方向的數值,也就是 j 要變動Image_Height要改成Image_Height/2,47,,作業六:旋轉180度,提示:要各執行水平翻轉,與垂直翻轉各一次48,,。
