屏蔽图像时出错
error while masking an image
我只是想在应用之前对其进行阈值处理 algorithm.i 在一种算法中进行了尝试并获得了完美 result.but 这里我考虑了二进制图像然后 masking.i 只想要椎间盘(椭圆部分)在椎骨之间。你能推荐任何其他方法吗?
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 并且我收到错误消息
使用 .* 时出错
整数只能与相同 class 或标量双精度的整数组合。
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')
代码可能存在多个问题。虽然使用乘法应用掩码在技术上是可行的,但我建议改用索引:
Img(~mask)=0;
此代码将不在掩码中的每个像素设置为零。
您的代码可能还有其他问题。您正在使用 uint8
获取 uint8 图像,但该函数不会重新缩放。如果您输入一个标准化的双图像(值介于 0 和 1 之间),您最终会得到一个黑色图像,因为它只包含 0 和 1 值。使用 im2uint8
转换图像,但我认为您在这里尝试做的事情也可以在双图像上完成。
我只是想在应用之前对其进行阈值处理 algorithm.i 在一种算法中进行了尝试并获得了完美 result.but 这里我考虑了二进制图像然后 masking.i 只想要椎间盘(椭圆部分)在椎骨之间。你能推荐任何其他方法吗?
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 并且我收到错误消息 使用 .* 时出错 整数只能与相同 class 或标量双精度的整数组合。
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')
代码可能存在多个问题。虽然使用乘法应用掩码在技术上是可行的,但我建议改用索引:
Img(~mask)=0;
此代码将不在掩码中的每个像素设置为零。
您的代码可能还有其他问题。您正在使用 uint8
获取 uint8 图像,但该函数不会重新缩放。如果您输入一个标准化的双图像(值介于 0 和 1 之间),您最终会得到一个黑色图像,因为它只包含 0 和 1 值。使用 im2uint8
转换图像,但我认为您在这里尝试做的事情也可以在双图像上完成。