将MATLAB滤镜应用于Dicom图像的问题

时间:2015-05-18 12:40:52

标签: matlab image-processing filter dicom edge-detection

我正在使用dicom胸部PA。加载图像和进行基本的阈值处理工作没有问题,但我需要应用一些过滤器。我将来会设计自己的滤波器,但现在我想使用MATLAB。图像为16位,在MATLAB文档中,它表示fspecial可以很好地处理16位图像。

当我尝试使用fspecialedge函数时,我会得到与图像相似的结果,如下所示。

我的问题:为什么会发生这种情况,我该如何解决?

感谢您的帮助。 的问候,

full_path = 'I:\Find and Treat\Anonymized_Data\000026_20050607112512_1.dcm';
dicominfo_image = dicominfo(full_path);
dicomread_image = dicomread(dicominfo_image);
dicomread_image = mat2gray(dicomread_image);
c = imcomplement(dicomread_image);

figure,
subplot(1,3,1)
imshow(c)
f = fspecial('laplacian');
cf = filter2(f,c);
subplot(1,3,2)
imshow(cf)
f1 = fspecial('log');
cf1 = filter2(f1,c);
subplot(1,3,3)
imshow(cf1)

results

修改

我添加并修改了以下代码以考虑动态范围并绘制了网格图,我获得了以下结果和错误消息。

  

警告:更新LineStrip时出错。

     

因未知原因更新失败

     

警告:更新LineStrip时出错。

     

因未知原因更新失败

figure,
subplot(2,3,1)
imshow(c, [])
f=fspecial('laplacian');
cf=filter2(f,c);
subplot(2,3,2)
imshow(cf, [])
f1=fspecial('log');
cf1=filter2(f1,c);
subplot(2,3,3)
imshow(cf1, [])

subplot(2,3,4)
mesh(c)
subplot(2,3,5)
mesh(cf)
subplot(2,3,6)
mesh(cf1)

updated image

修改

LINK TO IMAGE FILE

1 个答案:

答案 0 :(得分:3)

您的图片只是太大

拉普拉斯算子是一个3x3矩阵,近似于图像的二阶导数。您的图像是2700x2200,这意味着该小尺寸(与整个图像相比)的像素的可变性是可忽略的。如果您将拉普拉斯滤波器图像绘制为imshow(cf(300:end-300,300:end-300), [])来删除边界(实际上有很大的间隙),您可以更好地看到它。要解决此问题,您需要或重新定义具有更高维度的拉普拉斯滤波器,或者将您拥有的图像调整为更小的尺寸(imresize是您的朋友)。

log过滤器也是如此,但在这种情况下,您可以对此做些什么。 fspecial返回的默认日志过滤器为5x5,但您实际上可以要求fspecial创建更大的过滤器。

如果您按以下方式调用它:

f1=fspecial('log',50,0.3);
cf1=filter2(f1,c);
imshow(cf1, [])

你得到下一个数字,看起来是一个很好的日志过滤结果。

enter image description here