Re: [繪圖] 關於做邊緣偵測的一些問題 已回收

看板MATLAB作者 (雁)時間15年前 (2011/01/06 10:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《da1ni2kimo (柚之香)》之銘言: : [I,map] = imread(['我的圖片.jpg']); : G = rgb2gray(I); : cx = [-1 0 1 ; -2 0 2 ; -1 0 1]; : cy = [-1 -2 -1 ; 0 0 0 ; 1 2 1]; : Gx = filter2( cx, G ); : Gy = filter2( cy, G ); : F = abs( Gx ) + abs( Gy ); : Bw_F = double(F)/255; : 請問一下F跟Bw_F的差別在於? 為什麼以imshow顯示F的圖形卻消失了呢? : 我看影像處理的書做到算出微分大小結果就結束了 : 如果我想用數值比較幾張圖片他們的清晰度優劣, : 可以往什麼方向著手呢? : 感謝~ 由原po所列的程式, Gx,Gy,F和Bw_F的值型態會是Double, 在此先知道一下型態,之後的解說會用得到. 假設你所輸入的影像G的像素值是介於0~255, 那F裡的值嚴格來說有機會超過255, Bw_F那行其實是在做量化, 我猜它是要量化0到1之間, 但它這樣的量化方式會有問題, 若要量化應該是 F = (F-min(F(:)))/(max(F(:))-min(F(:))); 這樣F裡頭的值才會介於0到1之間. 然後在秀圖時分成幾個case, case 1: F裡頭的值已量化(介於0~1),那指令就直接輸入 imshow(F); 它就會秀出正確灰階圖. 在此順便提一下, 假設今天F沒經過量化, 也就是什麼值都有可能 此時輸入imshow(F), 它還是會秀出圖來, 只是小於0的當成0, 大於1的當成1. case 2: F裡頭的值已量化,但想量化到0~255再秀出圖, 那指令就輸入 F = F*255; imshow(uint8(F)); 就會秀出正確的灰階圖, 若不加uint8就會變成case 1裡頭附註的情形. 這裡提醒一下, 若F前面加了uint8, 小於0的當成0, 大於255就當成255. case 3: F沒量化, 但想秀出正確的圖, 指令就輸入 imshow(F,[]); F內容沒變, 但在秀圖時會先量化後再輸出. 在一些影像的書上會看到邊緣偵側後的結果是二值化影像(pixel值是0或1) 那是它有取門檻值, 不然照公式算出來的結果也不可能只出現1或0而已. 若我的解釋有錯的話, 非常歡迎指正, 畢竟我不是要誤人子弟XD. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.14.127
文章代碼(AID): #1D9Ic8PQ (MATLAB)
文章代碼(AID): #1D9Ic8PQ (MATLAB)