屏蔽图像时出错

时间:2015-08-03 08:17:27

标签: matlab image-processing

我只是想在应用算法之前对其进行阈值处理。我在一种算法中尝试了它并获得了完美的结果。但是在这里我考虑了二进制图像然后进行了掩蔽。我只想要椎骨之间的椎间盘(椭圆部分)。你能建议任何其他方法吗?

 close all;
    clear all;
    %%
    Img = imread('Sub.png');
    Img=rgb2gray(Img);%convert to single channel as data do not contain color image
    Img=im2bw(Img,.16);
    fig1=figure;
    subplot(221)
    imshow(Img); title('Original Image')

    m1 = uint8(Img>35);
    subplot(222), imshow(m1,[]); title('Mask m1');

    m2=uint8(Img<300);
    subplot(223), imshow(m2,[]); title('Mask m2');

    sd = stdfilt( double(Img), ones(3,3));
    m3= uint8(sd<18);
    subplot(224), imshow(m3,[]); title('Mask m3');

    fig2=figure;
    I = uint8(Img.* m1);
    I = uint8(I.* m2);
    I = uint8(I.* m3);
    subplot(221), imshow(I);
    title('Masked Img')

我收到错误

我无法查看mask1,mask 2,mask3以及我收到错误 使用时出错。* 整数只能与同一类的整数或标量双精度组合。

test1(第22行)出错

更正后的代码

close all;
clear all;
%%
Img = imread('Sub.png');
Img=rgb2gray(Img);%convert to single channel as data do not contain color image
Img=im2bw(Img,.16);
fig1=figure;
subplot(221)
imshow(Img); title('Original Image')

m1 = uint8(Img>35);
subplot(222), imshow(m1,[]); title('Mask m1');

m2=uint8(Img<300);
subplot(223), imshow(m2,[]); title('Mask m2');

sd = stdfilt( double(Img), ones(3,3));
m3= uint8(sd<18);
subplot(224), imshow(m3,[]); title('Mask m3');

fig2=figure;
Img(~m1)=0;
Img(~m2)=0;
Img(~m3)=0;
subplot(221), imshow(Img);
title('Masked Img')

1 个答案:

答案 0 :(得分:1)

代码可能存在多个问题。虽然在技术上可以使用乘法应用蒙版,但我建议使用索引:

// This is a utility method to find the parent item for a given column. The item based API eliminates the need for this method.
- (FileSystemNode *)parentNodeForColumn:(NSInteger)column {
    if (_rootNode == nil) {
        _rootNode = [[FileSystemNode alloc] initWithURL:[NSURL fileURLWithPath:@"/Users/kiritvaghela"]];
    }

    FileSystemNode *result = _rootNode;
    // Walk up to this column, finding the selected row in the column before it and using that in the children array
    for (NSInteger i = 0; i < column; i++) {
        NSInteger selectedRowInColumn = [_browser selectedRowInColumn:i];
        FileSystemNode *selectedChildNode = [result.children objectAtIndex:selectedRowInColumn];
        result = selectedChildNode;
    }

    return result;
}

- (void)browser:(NSBrowser *)browser willDisplayCell:(NSBrowserCell *)cell atRow:(NSInteger)row column:(NSInteger)column {
    FileSystemNode *parentNode = [self parentNodeForColumn:column];
    FileSystemNode *childNode = [parentNode.children objectAtIndex:row];

    [cell setTitle:childNode.displayName];

    cell.image = node.icon;

}

此代码将每个不在掩码中的像素设置为零。

您的代码可能存在其他问题。您正在使用Img(~mask)=0; 来获取uint8图像,但该功能不会重新缩放。如果输入标准化的双重图像(0到1之间的值),您将得到一个黑色图像,因为它只包含0和1值。使用uint8转换图片,但我认为您在此处尝试的操作也可以在双图像上完成。