【问题标题】:Matlab:How to eleiminate the black background and retain the region of interest in my image?Matlab:如何消除黑色背景并保留图像中的感兴趣区域?
【发布时间】:2011-05-13 11:59:54
【问题描述】:

我有以下 IR(红外)图像,该图像是用网络摄像头拍摄的,该图像转换为在 IR 中工作。图片捕捉到了皮肤下的静脉。我要做的只是保留拳头并摆脱周围的黑色区域。我如何在 MATLAB 中做到这一点?

这是我到目前为止所做的,但我只是为此得到一张黑色图像

a=imread('1.jpg'); 
figure; imshow(a); 
b=rgb2gray(a); 
figure; 
imshow(b); 
[j,k]=size(b); 
for g=1:j 
for f=1:k 
if b(j,k)>0.06 
c(j,k)=0; 
else c(j,k)=1; 
end 
end
 end 
figure,imshow(c);

谁能告诉我我做错了什么,以及我如何才能完成我想要的?另外,当我的意思是我想摆脱背景时,我的意思是我想要一个白色背景而不是黑色背景>因为这个项目的目的是只保留静脉,静脉将保留为黑色。然后我将获取这些点的坐标。所以我不希望背景也被生成为坐标......!所以我想要背景为白色..!如何做到这一点?

【问题讨论】:

    标签: matlab image-processing threshold


    【解决方案1】:

    你想做的事情叫做segmentation,是图像处理中的一个大话题。你的图像非常好,所以如果你有图像处理工具箱,这很容易。即使你不这样做,它仍然没有那么难。

    正如 Chris 所提到的,在对图像进行任何操作之前,您应该将图像转换为 double。如果您有图像处理工具箱,则可以使用函数graythresh 找到最佳阈值水平。请注意,您不需要使用 for 循环进行阈值处理,在 MATLAB 中您可以在一行中对整个矩阵进行阈值处理。

    b = im2double(b);              %convert to double
    thresh_level = graythresh(b);  %find best threshold level
    c = b > thresh_level;          %do thresholding
    imshow(c)
    

    这会给您一个二进制图像,其中您的拳头的值为 1,背景标签为 0。为了保持拳头不变,我们将二进制版本与原始版本相乘。现在背景全为零,拳头保持原来的值。

    d = im2double(c).*b;           %c is binary, so we need to convert it first
    imshow(d,[])
    

    如果您没有图像处理工具箱,则需要手动选择阈值级别。这可能有点棘手。您使用了 0.06,但 graythresh 建议 0.2980 是最好的。我发现找到阈值的一个好方法是查看图像的直方图。

    hist(b(:),256);
    

    我们可以从直方图中清楚地看到,我们有两个点集群,并且 2 和 3 之间的任何值都可以很好地分离集群。所以我们应该使用那个区间中的一个值来做阈值。

    【讨论】:

    • @khadeejah:我认为这回答了你的问题,如果对你有帮助,你应该接受它。
    【解决方案2】:

    我看到的几个问题:

    在您的代码中,您使用 g 和 f 作为循环计数器,但您始终将 b 数组作为 b(j,k) 访问。

    同样,imread 读取的是 uint8,因此您无法将其与双精度 (0.06) 进行比较。因此通过以下方式转换为双精度:

    b=im2double(b);
    

    此外,在这种情况下没什么大不了的,但是您在每次循环迭代时动态增长 c。如果图像很大,这将极大地阻碍代码的性能。通过以下方式分配:

    c=ones(j,k);
    

    在这些变化之后,它会产生类似于你的拳头的东西。但是,由于背景不是统一的颜色,所以效果不太好。这部分超出了我的经验范围......

    【讨论】:

    • bt 我希望手掌保持原样。在这里你说过它变黑了..:(那么现在该怎么办..:(
    • 这就是您的代码所做的。使用 Gjaul 的答案,它会更好。我没有图像分析经验,所以我能做的就是修复你的代码,让它“工作”。
    • 他他@chris ..非常感谢! :D 是的 ghauls 真的做到了..! :D
    猜你喜欢
    • 2017-11-19
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2018-06-17
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多