我正在使用 dicom 胸部 PA。我加载图像和执行基本阈值处理工作没有问题,但是我需要应用一些过滤器。我将来会设计自己的滤波器,但现在我想使用 MATLAB 的滤波器。这些图像是 16 位的,在 MATLAB 文档中,它说 fspecial
可以很好地处理 16 位图像。
当我尝试使用 fspecial
或 edge
函数时,我得到与图像类似的结果,如下所示。
我的问题:为什么会发生这种情况以及如何解决它?
感谢您的帮助。 问候,
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)
编辑
我添加并修改了以下代码以考虑动态范围并绘制了网格图,我获得了以下结果和错误消息。
Warning: Error updating LineStrip.
Update failed for unknown reason
Warning: Error updating LineStrip.
Update failed for unknown reason
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)
编辑
最佳答案
您的图片太大。
拉普拉斯算子是一个 3x3 矩阵,近似图像的二阶导数。您的图像为 2700x2200,这意味着在如此小的尺寸(与整个图像相比)中像素的变化可以忽略不计。如果将拉普拉斯滤波器图像绘制为 imshow(cf(300:end-300,300:end-300), [])
并删除边界(实际上有很大间隙),您可以看到更好的效果。要解决此问题,您需要重新定义具有更高维度的拉普拉斯滤波器,或将图像调整为较小的尺寸(imresize
是您的 friend )。
log
过滤器也会发生同样的情况,但在这种情况下,您可以对此采取一些措施。 fspecial
返回的默认日志过滤器是 5x5,但您实际上可以要求 fspecial
创建更大的过滤器。
如果您按以下方式调用它:
f1=fspecial('log',50,0.3);
cf1=filter2(f1,c);
imshow(cf1, [])
您将得到下图,这看起来是一个不错的日志过滤结果。
关于matlab - 将 MATLAB 过滤器应用于 Dicom 图像时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30303471/