[討論] 請問如何作二值化門檻已回收

看板MATLAB作者 (山豬元年革命志士)時間15年前 (2011/03/03 11:09), 編輯推噓1(107)
留言8則, 5人參與, 最新討論串1/1
若是用for loop來作 和C一樣很簡單 但matlab這樣跑起來很慢 想請問一下語法 假設 a = 800*800的矩陣 我將其value > 128的設為1 mask = a>128; mask 變成一個0,1矩陣 如何得到c參考mask矩陣 為0時將a值設為0,為1時將a值保留存到c 我用 c = mask & a (傻傻的這樣寫還是得到01矩陣) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.78.236

03/03 11:28, , 1F
a.*(a>128)
03/03 11:28, 1F

03/03 11:51, , 2F
你原意應該是c=a;c(c<=128)=0
03/03 11:51, 2F

03/03 13:32, , 3F
thx 前輩 還沒跳入matlab的語法思維 :p
03/03 13:32, 3F
如果我還是需要參考mask來運算 因為不一定還是copy a矩陣的資料 但是mask已經固定了 那應該怎麼寫? ※ 編輯: Achillean 來自: 122.116.78.236 (03/03 13:55)

03/04 02:47, , 4F
msk=a;msk(msk<=128)=0;msk(msk>128)=1;好像跟二樓一樣?
03/04 02:47, 4F

03/04 08:29, , 5F
若mask只有0與1,就用一樓方法,c=a.*mask
03/04 08:29, 5F

03/04 13:17, , 6F
thx 大家
03/04 13:17, 6F

03/07 15:20, , 7F
c = a .* double(int16(a / 128)) 就這樣
03/07 15:20, 7F

03/07 15:21, , 8F
啊~寫成 >= 128 都會保留了.... 把 128 改為 129 吧
03/07 15:21, 8F
文章代碼(AID): #1DRmPFwQ (MATLAB)