Как мне сохранить вены только черные, используя MATLAB? - PullRequest
2 голосов
/ 24 апреля 2011

У меня есть это ИК-изображение, которое запечатлело вены под кожей. Я хочу обработать это изображение, чтобы сохранить только вены черного цвета, а все остальное - белым. Затем я хочу сгенерировать координаты пикселей в виде этих черных пикселей, которые будут венами.

Это то, что я делал до сих пор:

a=imread('11.jpg');
figure(1),imshow(a);
title('original image');
cform = makecform('srgb2lab');
for ii = 1:3
    a(:,:,ii) = medfilt2(a(:,:,ii),[5 5]);
end
lab = applycform(a,cform); 
figure(2),imshow(lab);
title('ímage in color space after filtering');
b=lab(:,:,1);
c=im2bw(b,0.2);
figure(3),imshow(c);
title('b&white boundry of fist');
neg=1-c;
figure(4),imshow(neg);
color=a;
r=color(:,:,1);
r(~c)= 0;
g = color(:,:,2);
g(~c)= 0;
b = color(:,:,3);
b(~c)= 0;
% Concatenate in the "3rd dimension" to re-constitute an RGB image.
color = cat(3,r,g,b);
figure(5),
imshow(color);
title('reconstructed fist with black bg');
gray=rgb2gray(color);
figure(6);
imshow(gray);
title('grayscale of fist');

i1=imresize(gray,[256 256],'bilinear');
figure(7);
imshow(i1);
title('Resized Image of grayscale');

figure(8),imhist(i1);
title('histogram of resized grayscale');
i2=histeq(i1,256);
figure(9),imshow(i2);
title('histogram equalisatio');
figure(10),imhist(i2);
title('équalised histogram');
e=medfilt2(i2,[5 5]);
figure(7),imshow(e);
f=medfilt2(e,[5 5]);
figure(8),imshow(f);
g=medfilt2(f,[5 5]);
figure(9),imshow(g);
s=g;
figure(10),imshow(s);
l=imresize(s,[200 200]);
figure(11);
imshow(l);

[h,u]=size(l);
smth=double(l);
wl=1.5;
we=3;
wt=15;
eline=smth;;
[grady,gradx]=gradient(smth);
eedge=-1*sqrt((gradx.*gradx+grady.*grady));
figure(12);
imshow(uint8(-eedge));
m1=[-1 1];
m2=[-1;1];
m3=[1 -2 1];
m4=[1;-2;1];
m5=[1 -1;-1 1];
cx=conv2(smth,m1,'same');
cy=conv2(smth,m2,'same');
cxx=conv2(smth,m3,'same');
cyy=conv2(smth,m4,'same');
cxy=conv2(smth,m5,'same');
for i=1:h
    for j=1:u
        eterm(i,j)=(cyy(i,j)*cx(i,j)*cx(i,j)-2*cxy(i,j)*cx(i,j)*cy(i,j)+cxx(i,j)*cy(i,j)*cy(i,j))/((1+cx(i,j)*cx(i,j)+cy(i,j)*cy(i,j))^1.5);
    end
end
figure(13);
imshow(uint8(-eterm));
eext=(wl*eline+we*eedge+wt*eterm);
figure(14);
imshow(uint8(eext));
eext=(wl*eline+we*eedge);
figure(15);
imshow(uint8(eext));
whos eext;

и это изображение:

enter image description here

Итак, как мне поступить после этого, чтобы сохранить вены черными, а все остальное - белыми?

after median filtering

Итак, это изображение после медианной фильтрации, поскольку вы можете видеть, что вены довольно темные. Итак, как мне перейти отсюда, чтобы вены оставались черными, а все остальное - белыми?

1 Ответ

0 голосов
/ 25 апреля 2011

Как только у вас будет второе изображение, вам нужно будет установить порог для изображения , чтобы получить то, что вы просите. Вы можете реализовать это самостоятельно или использовать graythresh из matlab (требуется набор инструментов для обработки изображений).

...