我有一個靜脈圖像如下。我使用分水嶺算法來提取靜脈的骨架。
我的代碼:(K是原始圖像)。
level = graythresh(K);
BW = im2bw(K,level);
D = bwdist(~BW);
DL = watershed(D);
bgm = DL == 0;
imshow(bgm);
結果是:
正如你可以看到大量的信息丟失。有人可以幫我嗎?謝謝。
我有一個靜脈圖像如下。我使用分水嶺算法來提取靜脈的骨架。
我的代碼:(K是原始圖像)。
level = graythresh(K);
BW = im2bw(K,level);
D = bwdist(~BW);
DL = watershed(D);
bgm = DL == 0;
imshow(bgm);
結果是:
正如你可以看到大量的信息丟失。有人可以幫我嗎?謝謝。
它看起來像照明有點不平衡。這可以使用某些形態學操作來糾正。其基本思想是計算一個代表不均勻光照的圖像,並將其減去或除以它(這也增強了對比度)。因爲我們只想找到光照,所以使用足夠大的結構化元素非常重要,以便操作檢查更多全局屬性而不是本地屬性。
%# Load image and convert to [0,1].
A = im2double(imread('http://i.stack.imgur.com/TQp1i.png'));
%# Any large (relative to objects) structuring element will do.
%# Try sizes up to about half of the image size.
se = strel('square',32);
%# Removes uneven lighting and enhances contrast.
B = imdivide(A,imclose(A,se));
%# Otsu's method works well now.
C = B > graythresh(B);
D = bwdist(~C);
DL = watershed(D);
imshow(DL==0);
這裏是C
(左),加上DL==0
(中心)和它的原始圖像上疊加:
是的,你需要有可能降低你的閾值(比大津的方法是給你更低)。如果在降低閾值時邊緣圖有噪聲,則應在應用二維高斯平滑濾波器之前降低閾值。這會稍微移動邊緣,但也會清理噪音,所以這是一個折衷。
2-d高斯可以應用做這樣
w=gausswin(N,Alpha) % you'll have to play with N and alpha
K = imfilter(K,w,'same','symmetric'); % something like these options
東西之前,你申請你的算法的其餘部分。
你失去的信息,因爲當你申請im2bw
,你基本上轉換您uint8
圖像,其中像素亮度需要從intmin('uint8')==0
到intmax('uint8')==255
值,爲二進制圖像(其中只使用logical
值)。這就意味着你觀察到的信息丟失。 如果顯示的圖像BW
你會看到這有一個大於閾值level
轉成者越大的K
所有元素,而低於閾值轉成零的那些人。
效果很好。不過,圖片會很好。 – Jonas 2012-04-16 03:31:57
良好的建議...(見編輯)。 – 2012-04-16 03:37:09
非常感謝您的幫助。只是一個簡單的問題。 如果我想申請IMOPEN隨後imclose我應該修改這部分 SE = strel(「方」,32); im_open = imopen(A,se); B = imdivide(A,imclose(im_open,se)); 我正在閱讀的論文現在正在閱讀,他們說這樣使用可以大大減少錯誤的分支。但是,當我這樣做時,似乎有更多的假分支哈哈。你有什麼建議嗎?謝謝 – W00f 2012-04-16 16:37:26