我正在使用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)
修改
我添加并修改了以下代码以考虑动态范围并绘制了网格图,我获得了以下结果和错误消息。
警告:更新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)
修改
答案 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, [])
你得到下一个数字,看起来是一个很好的日志过滤结果。