我有一個二進制掩碼,標記圖像的前景。許多圖像處理算法,如直方圖均衡或otsu方法處理整個圖像。我的問題是如何應用這些圖像處理算法,以便他們只能處理我的二進制掩碼標記的區域?如何在基於Matlab中的二進制掩碼標記的ROI上應用圖像處理算法?
例如,I
是灰度圖像,而BW
是二進制掩碼。下面的代碼仍會處理整個圖像,而不是由BW
蒙版標記的特定區域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
我有一個二進制掩碼,標記圖像的前景。許多圖像處理算法,如直方圖均衡或otsu方法處理整個圖像。我的問題是如何應用這些圖像處理算法,以便他們只能處理我的二進制掩碼標記的區域?如何在基於Matlab中的二進制掩碼標記的ROI上應用圖像處理算法?
例如,I
是灰度圖像,而BW
是二進制掩碼。下面的代碼仍會處理整個圖像,而不是由BW
蒙版標記的特定區域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
你的代碼的問題是,你只是設置圖像的元素爲零。相反,您只應將感興趣的體素傳遞給grayscale
算法。例如,如果BW
是在投資回報爲零,可以說
level = graythresh(I(BW>0));
這將只選擇要用於閾值計算的元素。據簡寫
level = graythresh(I(find(BW>0)));
此表達式的第二形式創建與索引的中間陣列 - 這是通常比使用邏輯索引(這是這種指標被調用)慢。
@SimaGuanxing,還可以通過以下實現相同:
級別= graythresh(I(BW));
但是你必須確保BW是一個與我的邏輯值相同的矩陣。
有關更多信息,請參閱[邏輯索引](https://nl.mathworks.com/help/matlab/math/matrix-indexing.html#bq7egb6-1)。 – m7913d