【问题标题】:Dividing an image into two non-rectangular non-square sub-image in matlab在matlab中将图像划分为两个非矩形非正方形子图像
【发布时间】:2015-05-12 06:15:21
【问题描述】:

假设我有这样的图像: http://www.mathworks.com/help/releases/R2015a/examples/images/BasicImageImportProcessingAndExportExample_03.png

(matlab中的原图pout.tif)

并像这样帮助图像(二进制掩码): http://upload7.ir/uploads//df17be22203e3099ba0d86e7cb203477bc909244.jpg

(与原图大小相同)

我写了这个简单的代码来将原始图像分成两个图像:

I=imread('pout.tif');
figure,imshow(I),title('original image')

Ih=imread('helpPic.jpg');
Ih=rgb2gray(Ih);
Ih=im2bw(Ih);
figure,
imshow(Ih),title('help image')

im1=I.*uint8(Ih);
figure,
imshow(im1),title('im1')

im2=I.*uint8(1-Ih);
figure,
imshow(im2),title('im2')

结果:

http://upload7.ir/uploads//12f09dde101cd4c98b53fcc0d400be87029ee07a.png

并且知道我想实现 Otsu 的方法来二值化这个子图像(im1 和 im2),我怎样才能实现 otsu 的方法部分有信息(子图像的非零部分)?

【问题讨论】:

    标签: image matlab matrix binary divide


    【解决方案1】:

    Image Processing Toolbox 中的graythresh 函数实现了Otsu 的方法。此外,由于 Otsu 的方法只关心像素的 而不是它们的位置,因此您可以在应用 graythresh 之前将感兴趣的像素重新排列在一维数组中。

    在实践中,这给出了 -compact- 以下代码:

    level1 = graythresh(I(Ih(:)));
    level2 = graythresh(I(~Ih(:)));
    

    最好的,

    【讨论】:

    • 感谢您的回答亲爱的@Crazy Rat,我这样做了,但我得到了错误(下标索引必须是真正的正整数或逻辑),我该如何消除这个错误?
    • @Karo AMini:你说得对,我已经检查过这个并编辑了我的答案。
    • 亲爱的@Crazy Rat 我们应该使用~Ih 而不是1-Ih 来消除错误。再次感谢。
    • 很高兴它有帮助。如果是这种情况,请将问题标记为已回答,以便社区知道您不再需要这方面的帮助。
    • 亲爱的@Crazy RaT,我应该对我的图像进行一些操作,我可以在这里就这个问题寻求你的帮助吗?
    【解决方案2】:

    由于Matlab的graythresh(实现了Otsu计算阈值的方法)使用I(:)并忽略了I的维度(你可以看到如果你edit gryythresh),你可以直接使用

    t = graythresh(im(im_mask))
    

    计算掩码为 1 的区域的阈值。

    【讨论】:

    • 感谢您的建议。来自库尔德斯坦的支持和爱以色列。
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多