User Tools

Site Tools


李宗樺:老人計畫會議

老人計畫大綱

應用電腦視覺技術於銀髮族生活輔助之研究
發展一輔助銀髮族生活的資訊系統
解決問題:
1.視力退化,看不清楚書報、文件
2.記性不佳,忘了藥吃過沒,忘了東西放在那裡
3.不會(不方便)使用複雜遙控器,控制家電設備
各子計畫內容:
子計畫一:利用攝影機及微投影機發展一擴增實境(AR)顯示技術
子計畫二:設計手勢偵測與辨識技術,用手勢達到控制家電之目的
子計畫三:開發物件檢索技術,從紀錄的影片中搜尋老人要找的物品
子計畫四:發展超解析度(super resolution)技術,將書報等文字放大

子計畫一 1st (2010.10.06)

擴增實境AR(Augmented Reality)
1.顯示面的幾何變形修正
  (1)平面
  (2)曲面
2.顯示面色彩補償
3.L型3D畫面顯示
  (1)光柵技術,表面鉅齒→看起來3D
  (2)手持垂直顯示
  (3)反射鏡調整上下旋轉   

子計畫二 1st (2010.10.13)

控制流程
家電選擇→控制指令→紅外線訊號
指尖判斷
IR控制電路
接收WiFi訊號

介面顯示(使用攜帶型投影機)
具有按鍵提示(按下時附加音效回饋)
眼睛與畫面的晃動
手指的位置是否會影響指尖判斷?

投影機與攝影機"取代"手與眼
由主控台+Arduino當Client

子計畫三 1st (2010.10.20)

回憶提醒
三年工作計畫:
1.靜態影像
2.動態影像
3.資料庫加密

Q1:如何判斷偵測動作的時機?
A1:當有手部或是有膚色出現在攝影場景時。
Q2:偵測動作的定義?
A2:使用特徵萃取
    包含光線變化、景深、旋轉、仿射、相似物件、傾斜

使用方法:
1.SIFT→尺度不變特徵轉換(Scale-invariant feature transform)
2.SURF→加速強健特徵(Speeded-Up Robust Features)
若人臉表情不同,可能會視為不同一人→使用五官距離比對做修正

SIFT→Mysift  (似OpenCV lkdemo.c)
SURF→opensurf、find_obj2.cpp (OpenCV example)
  opensurf→速度較慢、使用局部偵測、平滑偵測
  find_obj2.cpp→以圓圈表示關鍵點,圈大表示特徵強(顏色交錯處、物體直角處視為特徵點)

畫面與手部測試
手部座標移動到背景中的播放面板即可有播放效果
使用Webcam讀距離座標來做虛擬觸控效果    

子計畫四 1st (2010.10.27)

上週特徵不變量討論
1.臉部比例→"兩眼距離"與"眼到鼻的距離"比例
2.車牌文字位置→幾何比例

視力退化-影像處理問題
Q1:攝影距離的影響
Q2:光線變化的影響→造成二值化的效果較差,亮度大時文字顏色較淡
Q3:影像解析度的差異
Q4:手拿文件會有晃動的情形

Projection→投影x,y軸找黑點數量→找字距與行距
◎報告的重點-發生什麼問題待解決?
◎報紙文字做二值化後,文字會模糊(文字顏色淡、紙張顏色)
◎動態threshold→OpenCV有現成函式(CV_THRESH_OTSU、cvAdaptiveThreshold)
◎圖片比例?投影片的圖片與真實文字大小差異?
  要比較書本與報紙的字型大小→放個比例尺再拍照,例如一元硬幣
◎傾斜與光線問題,經過傾斜造成紙張受光不均勻,較亮的地方,文字較模糊
◎書本與報紙的字型和大小要相同,才能比較紙質與顏色差異
◎兩種效果的比較
  X 1.降低雜訊→造成文字模糊
  O 2.文字清楚→再想辦法降低雜訊
◎紙張不平整(有摺痕的情形)
  在同一環境下會有光線差異

子計畫一 2nd (2010.11.03)

◎報告目的要清楚→依與會人的角度來當報告順序
◎展現內容的技巧→由大綱至細節
◎Homography 矩陣轉換 
  程式中的四個座標為投影後的座標,座標是由公式推導而來
◎每個方法的使用目的→效果為何?為什麼使用?
◎透視轉換矩陣,由參數轉換成投影座標
  4*4矩陣,乘上4*1轉換矩陣,調整係數
◎使用距離(攝影與投影)
  因使用者而不同,距離應是範圍而非定值
◎所有子計畫對抖動的微調
◎硬體裝置的修正,角度與移動

子計畫二 2nd (2010.11.10)

紙板影像校正(偵測移動與轉動,做自動校正)
Perspective Transform 透視轉換
攝影距離 20cm~50cm
紙板轉動 0°~30°
距離大於50cm、角度大於30°→影像模糊
◎線段對比強烈才能找到座標
◎語音辨識"開燈"→英文拼音

子計畫三 2nd (2010.11.24)

影像提醒
三年工作計畫:
1.靜態影像  
2.動態影像
3.兩者整合

◎測試旋轉角度與圖片大小比對。
◎對實際眼鏡做比對,比較角度差異所造成的影響。
  →眼鏡的特徵點不多,如何找出眼鏡的「類別」?
  →特徵點的定義為何?角度、交叉處、背景對比強度。
◎目前只針對灰階影像做測試,依物體形狀與角度做偵測。
  →彩色圖會因為光線變化造成顏色失真。
◎測試目標物被其他物體遮蔽的情況下,能找出目標的比例。
◎scaling 約4~5層都可做偵測,每層之間有一定的大小比例。
◎常用的物品偵測,如鑰匙的搜尋,特徵點要取前端或後端?
Q1:影像角度、光線、解析度造成的影響,該如何修正?
Q2:所有「重要」物品的同時比對(如鑰匙和眼鏡)
Q3:若該影片中沒有「目標物」存在,會找到什麼特徵?

◎無線視訊
Q1:使用電源的方式?電池?重量與大小需要再考慮。
Q2:無線網路速度忽快忽慢,該如何解決?
    因為有多AP存在,會有分享頻寬的情形。
    使用802.11g無線網路格式,250~300m的有效距離。

子計畫四 2nd (2010.12.01)

1.圖文放大
2.文字放大並排版
Adaptive 可減少許多雜訊
以偏暗的範例做Threshold,減少光線的影響
◎使用函式要了解運作原理
◎Histogram equalization (直方圖均衡化)
  可在光線不足時,均勻提高圖片像素對比
◎Canny 邊緣檢測,多級邊緣檢測算法
◎bilinear interpolation 雙線性內插
◎目的清楚→找實作方法
◎垂直尋找,解決傾斜問題
◎文章排版後續問題
  若同一篇文章因版面分欄,而在不同區塊時,能否依文意作組合?
◎印刷時的網點問題
◎二值化造成彩色圖的失真

Kinect 討論 (2010.12.08)

◎Kinect彩色圖與深度圖兩者的大小與位置都不同,需要再校正
◎Kinect每台硬體讀到的資料不盡相同,需要個別修正
◎Kinect的影像邊緣穩定待處理
◎OpenCV找圖形,可用棋盤方格作校正 

子計畫一 3rd (2010.12.15)

攝影機測試廣角與非廣角
廣角視野大,但是輸出格式相同會造成變形的問題
如水平的牆面會因廣角鏡頭拍出具有弧度的變形
◎須測試拍攝距離造成變形的弧度差異,再進一步做校正,
  校正後的圖片應該會有水平放大的效果,與去除變形的弧
  度,才會比一般鏡頭有更大的視野。
◎投影距離為100cm與Webcam攝影距離90cm
  測試在不同燈光環境下所造成的投影效果
  目的要測試在家用環境燈光下是否能清楚投影
◎使用cvFindCornerSubPix前有做二值化再做處理
◎網路上的函式與參數格式
  void cvFindCornerSubPix( IplImage* I, CvPoint2D32f* corners,
                         int count, CvSize win, CvSize zeroZone,
                         CvTermCriteria criteria );
◎找不到正確的4個Corner可能原因
  因為宣告MAX_CORNERS=4,可能會因為4不夠大
  而有誤判的情形,所以有一點會在圖形中間而不是角落
◎投影放大於牆面的操作模式
◎攝影文件與投影放大的操作問題
  可能會有手拿文件擋住投影機的問題
  或是裝置過長只能站立使用的問題

子計畫二 3rd (2010.12.22)

子計畫二-紅外線收發.ppt

◎找膚色點的問題探討
  以200 pixel 為範圍尋找
◎超音波測距儀
  測量範圍10cm~300cm
◎紅外線訊號接收與發送
  紅外線訊號的使用
  目前的紅外線訊號處理

C與Arduino溝通範例

//2010.12.29  小葉老師提供
//暗示: 如果要在 C 寫程式,在 Windows 裡的C 可以用 CreateFile 及 
//ReadFile 來讀 COM port 資料, WriteFile 來寫資料給 COM port
//你們除了讀 (ReadFile)外,需要 WriteFile 才能叫arduino 板子做事送IR訊號出去。
#include <stdio.h>
#include <windows.h>
#include <WinBase.h>
 
int main()
{
	HANDLE hComm;
	hComm = CreateFile( "COM4",  
	                    GENERIC_READ | GENERIC_WRITE, 
	                    0, 
	                    0, 
	                    OPEN_EXISTING,
	                    FILE_FLAG_OVERLAPPED,
	                    0);
	if (hComm == INVALID_HANDLE_VALUE){
		printf("error!\n");
		return 0;
	}
 
	//WriteFile(hComm, "L ", 2,NULL,NULL);
	//WriteFile(hComm, "H ", 2,NULL,NULL);
	//WriteFile(hComm, "L ", 2,NULL,NULL);
	//WriteFile(hComm, "H ", 2,NULL,NULL);
	DCB            dcb = {0};
	GetCommState( hComm, &dcb );
	dcb.BaudRate = CBR_9600;
	dcb.ByteSize = 8;
	dcb.Parity = NOPARITY;
	dcb.StopBits = ONESTOPBIT;
	SetCommState( hComm, &dcb );
 
	DWORD n;
	OVERLAPPED overlapped;
	overlapped.Offset=0;
	overlapped.OffsetHigh=0;
	overlapped.hEvent=NULL;
	char line[512];
 
	char prev='0';
	int shake=0;
	while(1){
		int rval=ReadFile(hComm, line, 512, &n, &overlapped);
	//	printf("rval: %d line: %s-%d, n:%d\n", rval, line, strlen(line),n);
		if(line[0]=='1' && prev=='0'){
			prev='1';
			shake++;
			printf("shake: %d %c\n", shake, line[0]);
		}else if(line[0]=='0' && prev=='1'){
			prev='0';
			shake++;
			printf("shake: %d %c\n", shake, line[0]);
		}
	}
 
	return 0;
}
//2010.12.31  幸吟學姊提供
#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <WinBase.h>
 
int arone = 0;
HANDLE hComm;
 
int common=0;
 
int main()
{
	//HANDLE hComm;
	if(arone == 0)
	{
		hComm = CreateFile( "COM3",  
							GENERIC_READ | GENERIC_WRITE, 
							0, 
							0, 
							OPEN_EXISTING,
							FILE_FLAG_OVERLAPPED,
							0);
		arone = 1;
 
	}
	if (hComm == INVALID_HANDLE_VALUE){
		printf("error!\n");
		return 0;
	}
 
	//WriteFile(hComm, "L ", 2,NULL,NULL);
	//WriteFile(hComm, "H ", 2,NULL,NULL);
	//WriteFile(hComm, "L ", 2,NULL,NULL);
	//WriteFile(hComm, "H ", 2,NULL,NULL);
	DCB            dcb = {0};
	GetCommState( hComm, &dcb );
	dcb.BaudRate = CBR_9600;
	dcb.ByteSize = 8;
	dcb.Parity = NOPARITY;
	dcb.StopBits = ONESTOPBIT;
	SetCommState( hComm, &dcb );
 
	DWORD n;
	OVERLAPPED overlapped;
	overlapped.Offset=0;
	overlapped.OffsetHigh=0;
	overlapped.hEvent=NULL;
	char line[512];
 
	char prev1='0';
	int shake=0;
	int wr = 0;
 
	while(1){
		int rval=ReadFile(hComm, line, 512, &n, &overlapped);
	//	printf("rval: %d line: %s-%d, n:%d\n", rval, line, strlen(line),n);
		///-itoa(p1+1, arkeyin,10);
		common = atoi(line);
		if(common == 3 && prev1=='0')//需修改 
		{
			prev1='1';
			wr ++;
			printf("shake: %d \n", wr);
		}
		else if(line[0]=='0' && prev1=='1')
		{
			prev1='0';
		}
	}
}

2011.01.06
Serial Communications in Win32
http://msdn.microsoft.com/enus/library/ms810467.aspx
http://www.cnblogs.com/dekun_1986/archive/2009/08/11/1543770.html

子計畫三 3rd (2010.12.29)

影像提醒
SIFT、SURF
第一年實作靜態影像  
第二年實作動態影像
◎SIFT找出的特徵點有座標、方向、大小
  座標:圓點定位、方向:由圓點至線段尾端、大小:線段長度
◎圖片解析度影響特徵點的判斷
◎改變解析度來找相同的配對
Q:SURF目前會找出"未知"的強特徵點
EX:在眼鏡的中間會找出強特徵點(大圓圈),但是在圓圈中心(特徵點)
   是沒有其他物件的一片空白。
A:測試空白畫面或是一張白紙的照片,以SURF找特徵點
◎針對特徵點作統計分析
  由特徵點周圍8*8的pixel做統計八個向量的大小
  每個特徵點做周圍共4*4*8個pixel的統計分析
Q:若固定是4*4的分析範圍,在縮放的判斷是否會有誤差?
  是否存在固定的縮放比例?
◎常用物品特徵
  EX:鑰匙、眼鏡、藥丸
  →藥丸可以先建立資料庫再做搜尋比對
  →紀錄顏色、形狀、大小、刻痕等外觀特徵

子計畫四 3rd (2011.01.05)

上次排版方式
將圖片放兩倍大,依四個象限做切割並組合
本次排版方式
依"列"做切割,較能正確組合文章的順序
◎美化的問題
  以"列"切一半會有文字破碎的情況
◎equalization均化→平衡圖片色彩
◎Histogram equalization
  光線暗→效果好
  光線亮→效果差
  造成上述結果的原因?
◎影響:Histogram equalization > Threshold
◎由Histogram equalization的效果看哪一種適合
  Threshold 或 AdaptiveThreshold
◎由Projection投影分辨每一"列"
  並找出合適的"門檻值" → Threshold
◎使用Projection需要注意旋轉角度的校正
◎"行"的定義,每一句的行高都相同
◎由Histogram equalization → Projection → Threshold
  與CV_THRESH_OTSU 或 cvAdaptiveThreshold 
  使用的門檻值都是相同的
李宗樺/老人計畫會議.txt · Last modified: 2011/01/06 19:58 by 118.161.195.124