線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5160
推到 Plurk!
推到 Facebook!

最小平方法

答題得分者是:pgd
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-27 16:51:08 IP:163.18.xxx.xxx 訂閱
各位前輩好:
我想做的類似這篇,http://tw.knowledge.yahoo.com/question/?qid=1306020414726,利用方法二,
輸入幾個點的座標,然後找出最接近的直線,呈現在影像上,想請問要怎麼著手?謝謝...
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-27 17:48:01 IP:60.249.xxx.xxx 未訂閱
假設影像中像素值255的像素是要擬合直線的點,
M為斜率、B為節距。不知道是不是你要的。
[code cpp]

for(int i=0;i for(int j=0;j {
if(imgData[i][j]==255)
{
XY=i*j XY;
X=X j;
Y=Y i;
X2=j*j X2;
num=num 1;
}
}
M=(num*XY-X*Y)/(num*X2-X*X);
B=(X2*Y-X*XY)/(num*X2-X*X);
[/code]
編輯記錄
pgd 重新編輯於 2007-11-27 17:48:37, 註解 無‧
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-27 19:49:27 IP:163.18.xxx.xxx 訂閱
不懂您的意思?
===================引 用 pgd 文 章===================
假設影像中像素值255的像素是要擬合直線的點,
M為斜率、B為節距。不知道是不是你要的。
[code cpp]

for(int i=0;i for(int j=0;j {
if(imgData[i][j]==255)
{
XY=i*j XY;
X=X j;
Y=Y i;
X2=j*j X2;
num=num 1;
}
}
M=(num*XY-X*Y)/(num*X2-X*X);
B=(X2*Y-X*XY)/(num*X2-X*X);
[/code]
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-28 10:17:53 IP:60.248.xxx.xxx 未訂閱
I是要計算點的X座標,J是Y座標。
算出來的方程式為Y=MX B
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-28 10:35:13 IP:163.18.xxx.xxx 訂閱
中間那些式子我看不懂,是用最小平方嗎?
===================引 用 pgd 文 章===================
I是要計算點的X座標,J是Y座標。
算出來的方程式為Y=MX B
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-28 10:38:19 IP:60.249.xxx.xxx 未訂閱
是最小平方法阿,對M和B偏微分,只是我導成通式。
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-28 23:20:31 IP:163.18.xxx.xxx 訂閱
那算出來的方程式怎麼畫成直線呢?
===================引 用 pgd 文 章===================
是最小平方法阿,對M和B偏微分,只是我導成通式。
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-11-29 08:35:16 IP:60.249.xxx.xxx 未訂閱
假設影像座標是X,Y把X 0到640帶入方程式中求出Y取最接近的整數,
影像中例如底色為0,就把算出來的點值設成255就OK啦。
不然也可以算出頭尾兩點,再用BCB畫線的函式畫出來也是可以。
===================引 用 jenglin 文 章===================
那算出來的方程式怎麼畫成直線呢?
===================引 用 pgd 文 章===================
是最小平方法阿,對M和B偏微分,只是我導成通式。
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-11-30 00:10:52 IP:163.18.xxx.xxx 訂閱
用不到計算座標,我是直接給幾組x跟y的數值,
不好意思,看不懂您的程式,能不能解釋一下,非常感謝!
===================引 用 pgd 文 章===================
I是要計算點的X座標,J是Y座標。
算出來的方程式為Y=MX B
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-11-30 09:08:15 IP:60.248.xxx.xxx 未訂閱
假設我有(1,5),(10,6),(20,4)三個點要擬合一條直線
XY=1*5 10*6 20*4=145
X=1 10 20=31
Y=5 6 4=15
X2=1*1 10*10 20*20=502
num=3
M=-0.05
B=5.57

X是J,Y是I我之前講錯了,反正就是代入式子就OK啦,不知道你是哪邊不懂?
如果是不知道怎麼導出來的話,其實就是誤差平方對M和B偏微分為0,整理式子就會得到以下的結果,
但截斜式不是很好的方法,因為垂直的話就會出現數值問題斜率無窮大。請參考
===================引 用 pgd 文 章===================
假設影像中像素值255的像素是要擬合直線的點,
M為斜率、B為節距。不知道是不是你要的。
[code cpp]

for(int i=0;i for(int j=0;j {
if(imgData[i][j]==255)
{
XY=i*j XY;
X=X j;
Y=Y i;
X2=j*j X2;
num=num 1;
}
}
M=(num*XY-X*Y)/(num*X2-X*X);
B=(X2*Y-X*XY)/(num*X2-X*X);
[/code]
編輯記錄
pgd 重新編輯於 2007-11-30 09:18:15, 註解 無‧
pgd 重新編輯於 2007-11-30 09:25:47, 註解 無‧
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-11-30 11:44:12 IP:163.18.xxx.xxx 訂閱
算M跟B的式子跟我看的不一樣,能否秀一下您程式跑出來的結果?
===================引 用 pgd 文 章===================
假設我有(1,5),(10,6),(20,4)三個點要擬合一條直線
XY=1*5 10*6 20*4=145
X=1 10 20=31
Y=5 6 4=15
X2=1*1 10*10 20*20=502
num=3
M=-0.05
B=5.57

X是J,Y是I我之前講錯了,反正就是代入式子就OK啦,不知道你是哪邊不懂?
如果是不知道怎麼導出來的話,其實就是誤差平方對M和B偏微分為0,整理式子就會得到以下的結果,
但截斜式不是很好的方法,因為垂直的話就會出現數值問題斜率無窮大。請參考
===================引 用 pgd 文 章===================
假設影像中像素值255的像素是要擬合直線的點,
M為斜率、B為節距。不知道是不是你要的。
[code cpp]

for(int i=0;i for(int j=0;j {
if(imgData[i][j]==255)
{
XY=i*j XY;
X=X j;
Y=Y i;
X2=j*j X2;
num=num 1;
}
}
M=(num*XY-X*Y)/(num*X2-X*X);
B=(X2*Y-X*XY)/(num*X2-X*X);
[/code]
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-11-30 11:58:00 IP:60.248.xxx.xxx 未訂閱
請問何謂和你看的不一樣,就我的理解,最小平方法的意義就是算出誤差總和最小的直線方程式,
如果你有別的算式,那就把兩個算式的結果帶入點算出誤差,看哪個誤差比較小就代表哪個比較可靠,
另外程式結果就是我算出的M和B,我的結果如下圖,黑色的點是我的輸入,紅色的線就是我算出來的方程式。
編輯記錄
pgd 重新編輯於 2007-11-30 11:59:03, 註解 無‧
pgd 重新編輯於 2007-11-30 14:19:32, 註解 無‧
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-11-30 15:30:50 IP:163.18.xxx.xxx 訂閱
我後來是參考簡單線性迴歸,如底下連結,算出M=-0.05,B=5.52,不知道跟您的比較起來,哪個較準確?
http://www.mcu.edu.tw/department/management/stat/ch-paper/eteach/Statistics-3-net/chap24.pdf

另外,方程式y=-0.05x 5.52,程式上要怎麼畫出直線,能不能再解釋一下,感謝您...
===================引 用 pgd 文 章===================
請問何謂和你看的不一樣,就我的理解,最小平方法的意義就是算出誤差總和最小的直線方程式,
如果你有別的算式,那就把兩個算式的結果帶入點算出誤差,看哪個誤差比較小就代表哪個比較可靠,
另外程式結果就是我算出的M和B,我的結果如下圖,黑色的點是我的輸入,紅色的線就是我算出來的方程式。
編輯記錄
jenglin 重新編輯於 2007-11-30 15:36:30, 註解 無‧
jenglin 重新編輯於 2007-11-30 15:37:12, 註解 無‧
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-11-30 17:21:46 IP:60.248.xxx.xxx 未訂閱
這就要你自己評估囉,看哪個比較好用。
畫線的話查查BCB的HELP就有了,板上範例也很多
BCB應該是MoveTo和LineTo吧,很久沒用有點忘了
我則是用Mil的函式庫畫的,不好意思有點偷懶,
就這樣吧。
jenglin
一般會員


發表:45
回覆:32
積分:15
註冊:2006-10-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-11-30 18:17:13 IP:163.18.xxx.xxx 訂閱
劃線MoveTo和LineTo我知道,但是直線方程式的話,怎麼知道他頭尾2點座標?
===================引 用 pgd 文 章===================
這就要你自己評估囉,看哪個比較好用。
畫線的話查查BCB的HELP就有了,板上範例也很多
BCB應該是MoveTo和LineTo吧,很久沒用有點忘了
我則是用Mil的函式庫畫的,不好意思有點偷懶,
就這樣吧。
pgd
一般會員


發表:4
回覆:17
積分:9
註冊:2004-11-10

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-12-03 08:35:34 IP:60.248.xxx.xxx 未訂閱
例如方程式Y=-0.05+5.52
如果要畫在640*480的影像上
X=0,Y=5.52;X=640,Y=-26.8
這樣不就有兩點了嗎?沒這麼難吧
以這個例子來說Y會有負值,
你不要Y有負值的話就平移座標就好啦
系統時間:2024-04-19 22:36:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!