全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2252
推到 Plurk!
推到 Facebook!

我用c++寫的 sobel 不知哪裡錯誤??

尚未結案
candice
一般會員


發表:24
回覆:6
積分:6
註冊:2005-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-12 12:23:06 IP:211.76.xxx.xxx 未訂閱
我已經搜尋過站上的sobel相關文章了 可是因為語法我轉不過來 看不太懂 所以來這裡請教各位    我現在是做一連串的影像處理 先修出原圖 轉成灰階 再做sobel 前面兩項我都做好了 但sobel我一直做不出來 可以請大家幫我看看嗎    做法有些拙劣 請大家不要見笑並請給我一些意見 我應該要怎樣改寫比較好呢??     
void CMFC_1Dlg::OnBnClickedButton2()
{
    
        CClientDC  dc(this);
        maxX=ima.GetWidth();
        maxY=ima.GetHeight();
        byte Gx,Gy,Z,Y,max=-1;
        for (int y=1; ymax)max=Z;
                        
                }
        }
         for(int y=1;y=255)img[x][y]=0;
                        Y=(img[x][y]*255)/max;
                        
                        ima.SetPixelRGB(x,y,Y,Y,Y);                        
                }
        }
        ima.Draw(dc,0,0,maxX,maxY);
    dc.TextOut(30,10,"Sobel_1");
        for (int y=0; y     
        
sodesga
一般會員


發表:1
回覆:3
積分:0
註冊:2004-09-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-12 15:28:33 IP:202.39.xxx.xxx 未訂閱
Gx和Gy的值會爆掉,連帶著後面算出的值都錯了
candice
一般會員


發表:24
回覆:6
積分:6
註冊:2005-05-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-13 18:35:38 IP:211.76.xxx.xxx 未訂閱
請問還有人可以給我一些意見嗎? 對於此問題我真的很苦惱..
candice
一般會員


發表:24
回覆:6
積分:6
註冊:2005-05-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-13 18:42:06 IP:211.76.xxx.xxx 未訂閱
我做出來顯示出是這樣 ? 然而我用較簡單的圖形來測試時(用小畫家只畫一個方框) 畫面出來卻是全黑的 若是要將遮罩套入 // 3x3 GX Sobel mask. GX[0][0] = -1; GX[0][1] = 0; GX[0][2] = 1; GX[1][0] = -2; GX[1][1] = 0; GX[1][2] = 2; GX[2][0] = -1; GX[2][1] = 0; GX[2][2] = 1; // 3x3 GY Sobel mask. GY[0][0] = 1; GY[0][1] = 2; GY[0][2] = 1; GY[1][0] = 0; GY[1][1] = 0; GY[1][2] = 0; GY[2][0] = -1; GY[2][1] = -2; GY[2][2] = -1; 又應該如何改寫呢 我不知道應該怎麼套入 請給我一點方向吧 謝謝
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-20 21:49:54 IP:219.84.xxx.xxx 未訂閱
candice你好: 做Sobel時一定要再配置一個後處理的空間。每個pixel做mask後馬上寫回去是常見的錯誤做法。
candice
一般會員


發表:24
回覆:6
積分:6
註冊:2005-05-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-29 19:22:36 IP:211.76.xxx.xxx 未訂閱
前輩你好 請問後處理空間指的是什麼呢 還有再請問 gx gy的值是要宣告一個陣列然後把pixel算出的值存進去 還是可以只宣告成int 就好了呢? 謝謝
ddaken
一般會員


發表:39
回覆:33
積分:19
註冊:2005-01-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-30 10:31:44 IP:61.229.xxx.xxx 未訂閱
candice您好 我覺得這一篇..(我之前問的問題) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77252 已經說的很清楚了~~ 你可以參考看看~ 所謂後處理指的你現在要對a[i][j]做處理 處理後的資料放到b[i][j]而不是直接在放回a[i][j] 另外關於gx.gy~我想您可能不懂sobel到底是什麼吧? 所謂sobel簡單的說可以視其為一簡單的filter 假設現在你有
矩陣a[a1 a2 a3
      a4 a5 a6
      a7 a8 a9]
而現在要把sobel帶入放到b矩陣
那麼以a5這一點為例
新的b5的內容GX GY    GX=a7 a8*2 a9-(a1 a2*2 a3)
GY=(a3 a6*2 a9)-(a1 a4*2 a7)
   
因此做SOBEL會有邊緣的問題考慮與否(如a1...該怎麼取其芳鄰之點)
再者GX GY可能會超過255~~所以有爆表的問題
所以你問的問題
--------------------------------------------------
gx gy的值是要宣告一個陣列然後把pixel算出的值存進去
還是可以只宣告成int 就好了呢?
--------------------------------------------------
應該知道答案了吧?
如果還是不懂
還是去看影像處理的書吧~~
Digital Image Processing by Gonzalez and Woods                 
系統時間:2024-05-02 14:05:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!