[問題] 將灰階圖片轉成浮雕sobel_op ?

看板C_and_CPP (C/C++)作者 (K.L)時間16年前 (2010/04/12 00:45), 編輯推噓5(5052)
留言57則, 2人參與, 最新討論串1/1
按照V大的指示 須將值的範圍計算出來 再依照需求將值正常化 例如 以下列 公式計算 值將會落在 正負765之間 須將他縮小到想要呈現的地方 按照講義上的寫法 將彩色圖片轉為灰階後 將sobel mask x y都蓋上去 會變成強化邊緣偵測的感覺 希望得到的正確結果: http://en.wikipedia.org/wiki/Sobel_operator 下面四張圖之中下面兩張重疊 結果變成右上角的那張圖@@ 有問題的code: (請善用置底文標色功能) for (i=1;i<height-1;i++) for (j=1;j<boundary-1;j=j+3) b[i][j]=(-2)*newimage[i-1][j-1] +(-2)*newimage[i-1][j] +(-2)*newimage[i][j-1] +2*newimage[i+1][j] +(2)*newimage[i+1][j+1] +( 2)*newimage[i][j+1]; b[i][j+1] b[i][j+2] 同上 先謝謝各位了 ! 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.191.88 ※ 編輯: kimgtob 來自: 140.116.191.88 (04/12 00:47) ※ 編輯: kimgtob 來自: 140.116.191.88 (04/12 00:51)

04/12 01:07, , 1F
gradient會有正有負, 所以適當的處理過才會呈現下面兩張
04/12 01:07, 1F

04/12 01:08, , 2F
的結果, 你自己想想, 3x3 mask內pixel灰階全為0的時候或
04/12 01:08, 2F

04/12 01:08, , 3F
全為255的時候, 套你的code b[][]的值會算出0還是128(你
04/12 01:08, 3F

04/12 01:09, , 4F
想看到的中間階), 然後再自己想想看應該要怎麼處理....
04/12 01:09, 4F

04/12 01:10, , 5F
話說, 你貼的code寫成這樣, 你自己看了不覺得亂嗎-_-||
04/12 01:10, 5F

04/12 01:12, , 6F
請問一下 @_@ 原本BRG的轉成灰階後 可以直接套入公式嗎@@
04/12 01:12, 6F

04/12 01:13, , 7F
在最後面有將大於255跟小於0的固定值@_@
04/12 01:13, 7F

04/12 01:13, , 8F
忘了說, 有溢位的狀況也許也留意一下會比較好....@_@"
04/12 01:13, 8F

04/12 01:14, , 9F
下面兩張圖灰色部分是指128@_@?
04/12 01:14, 9F

04/12 01:14, , 10F
陣列爆掉的部分先全拿掉囉@_@
04/12 01:14, 10F

04/12 01:15, , 11F
code 原本有運算過剩六項 但是出來有誤 固重打
04/12 01:15, 11F

04/12 01:15, , 12F
為什麼式128?! 講義上跟WIKI都沒有特別說@ @
04/12 01:15, 12F

04/12 01:18, , 13F
你有想過某個b[i][j]套公式算出來的值域範圍在哪裡嗎??
04/12 01:18, 13F

04/12 01:19, , 14F
基本上會是-N~+N(N自己算XD), 就是我第一句說的, 算
04/12 01:19, 14F

04/12 01:20, , 15F
gradient的結果會有正有負; 但是你要用256灰階顯示出來
04/12 01:20, 15F

04/12 01:20, , 16F
gradient會有正有負 是指整個陣列運算玩去找值嗎?
04/12 01:20, 16F
※ 編輯: kimgtob 來自: 140.116.191.88 (04/12 01:22)

04/12 01:21, , 17F
這個有正有負的結果, 想想怎樣做你才看得出效果....
04/12 01:21, 17F

04/12 01:23, , 18F
if(b[i][j]>255) b[i][j]=255; 這樣做會變成強化邊緣Orz
04/12 01:23, 18F

04/12 01:24, , 19F
照公式 X Y遮罩 全0 全255結果都是零呀@@
04/12 01:24, 19F

04/12 01:25, , 20F
結果都是0, 那你覺得你的"浮雕"的灰色怎麼來的:)
04/12 01:25, 20F

04/12 01:26, , 21F
因為他的值並不是 九宮格內都是 0 或 255 所以灰色就是
04/12 01:26, 21F

04/12 01:26, , 22F
不屬於0或255 全都換成 128嗎@@?
04/12 01:26, 22F

04/12 01:26, , 23F
我覺得, 你要先搞懂那個浮雕圖是什麼意思, 才知道為什麼
04/12 01:26, 23F

04/12 01:27, , 24F
計算上要多加工個神秘(其實不神秘)的128....
04/12 01:27, 24F

04/12 01:28, , 25F
還有, 不要瞎猜亂試, 好好把網頁說明看一看, 有必要的話
04/12 01:28, 25F

04/12 01:28, , 26F
Q.Q 我覺得很神祕 他的浮雕 跟 laplacian 很像吧@@
04/12 01:28, 26F

04/12 01:28, , 27F
連相關連結一起看, 看懂了應該就知道自己要補什麼工:)
04/12 01:28, 27F

04/12 01:32, , 28F
在運算是後面加上218 快要很像答案了 可是還是有很明顯
04/12 01:32, 28F

04/12 01:33, , 29F
的邊緣
04/12 01:33, 29F

04/12 01:33, , 30F
加上 128@@
04/12 01:33, 30F

04/12 01:33, , 31F
我忘了一件事, Sobel的結果就是Wiki最右上角那張圖, 它
04/12 01:33, 31F

04/12 01:34, , 32F
本來就是edge detect常用的operator, 你為什麼想要看到
04/12 01:34, 32F

04/12 01:34, , 33F
不會變成最下面兩張小圖嗎@_@
04/12 01:34, 33F

04/12 01:35, , 34F
灰色的浮雕?? 又, 仔細看灰色浮雕下面說明的小字, 尤其
04/12 01:35, 34F

04/12 01:35, , 35F
因為題目是Embossment 然後助教給的公式CODE中描述的
04/12 01:35, 35F

04/12 01:35, , 36F
是"normalized"這個字; 又為什麼要normalize?? 我已經提
04/12 01:35, 36F

04/12 01:36, , 37F
示了你的公式算出來值域在-N~+N, 遠超過你用來顯示的灰
04/12 01:36, 37F

04/12 01:37, , 38F
normalize to [0, 255] 這個部是在完成所有的東西時做的
04/12 01:37, 38F

04/12 01:37, , 39F
嗎@ @?
04/12 01:37, 39F

04/12 01:37, , 40F
階值域0~255, 這就是為什麼說要加工; 又, 如果只加128上
04/12 01:37, 40F

04/12 01:38, , 41F
去, 表示正負你各有127階可以變化, 不過我想N>127不少:)
04/12 01:38, 41F

04/12 01:42, , 42F
N 左上角若都為255 出來值為-765 反之 765(u.4u8v4)
04/12 01:42, 42F

04/12 01:42, , 43F
我要自己決定哪些該變成灰色 哪些該變成白色黑色邊嗎?
04/12 01:42, 43F

04/12 01:43, , 44F
嚴格的來說其實不是128, 要說的話+127也差不多, 反正就
04/12 01:43, 44F

04/12 01:44, , 45F
是255/2. -765~+765如何normalize到0~255的範圍呢:)
04/12 01:44, 45F

04/12 01:46, , 46F
超過可用值域的值, 你可以切掉(設最大值), 也可以scale
04/12 01:46, 46F

04/12 01:47, , 47F
將-765與765之間的數先除回去 之後加上一常數 使其
04/12 01:47, 47F

04/12 01:47, , 48F
落在要的範圍
04/12 01:47, 48F

04/12 01:48, , 49F
(等比縮放), 也可以有其他處理方式; 就normalize唄XD
04/12 01:48, 49F

04/12 01:48, , 50F
最後將黑邊白邊抓出來?
04/12 01:48, 50F

04/12 01:50, , 51F
終於完成了@@ 感謝V大指導 也謝謝您願意花時間解釋 :)
04/12 01:50, 51F

04/12 01:51, , 52F
不太懂你最終要做什麼處理抓黑白邊, 就只說你想看到浮雕
04/12 01:51, 52F

04/12 01:52, , 53F
樣的結果, 它只是normalize的結果而已; 你的程式也許一
04/12 01:52, 53F

04/12 01:52, , 54F
開始就沒寫錯, 你只是沒把結果顯示成參考答案那樣XD
04/12 01:52, 54F

04/12 01:53, , 55F
謝謝 樓上詳細解釋 原來重點在normalize
04/12 01:53, 55F

04/12 01:53, , 56F
晚安囉 :) !!
04/12 01:53, 56F
※ 編輯: kimgtob 來自: 140.116.191.88 (04/12 01:55)

04/12 01:54, , 57F
原來推lag了, 那就搞定收工啦....^^
04/12 01:54, 57F
文章代碼(AID): #1BmVorm7 (C_and_CPP)
文章代碼(AID): #1BmVorm7 (C_and_CPP)