matlab - 将 MATLAB 过滤器应用于 Dicom 图像时出现问题

标签 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

编辑

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

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)

updated image

编辑

LINK TO IMAGE FILE

最佳答案

您的图片太大

拉普拉斯算子是一个 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, [])

您将得到下图,这看起来是一个不错的日志过滤结果。

enter image description here

关于matlab - 将 MATLAB 过滤器应用于 Dicom 图像时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30303471/

相关文章:

matlab - 在使用 bsxfun 方面需要帮助

matlab - 如何在没有 GUI 的情况下以批处理模式运行 Matlab

python - 如何检测图表区域并从研究论文的图像中提取(裁剪)它

java - OpenCV 特征检测器

elasticsearch - 如何从logstash将geo_point类型数据添加到elasticsearch?

html - 基于白名单为(X)HTML编写XSS过滤器

python - 如何将 MATLAB 文件转换为 PYTHON?

matlab - 为什么 Matlab octave origin awk 中的频率计数对于相同的数据集会得到完全不同的结果?

python - 边界框标注,从4点变为8点

powershell - 使用 powershell 命令处理用户名中的撇号(单引号) - Get-Azureaduser