对Ultra Sound图像进行预处理

因为是要训练FCN来进行医学图像处理,所以先要对样本的医学超声图像进行处理,主要有以下几个部分

  • 去除超声图像四周标记
  • 降噪
  • 图像增强

分别用一下3个步骤进行处理

1.降噪

  • 自适应中值滤波(可以更好的处理脉冲噪声和椒盐噪声)

2.去除四周标记

  • 形态学操作(运用开操作,即先腐蚀后膨胀,开操作是一般使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物)
    • 腐蚀(erode),是将灰度值小(视觉上就是比较暗)的区域增强扩展,主要用来去除比较亮的噪点。
    • 膨胀(dilate),是将灰度值大(视觉上就是比较亮)的区域增强扩展,主要用来连通相似颜色或强度的区域。

3.图像增强

  • 直方图均值化(直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像元取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。)

采用matlab来完成以上操作

先看一下文件结构(我将所用的图片的图片放在了original目录下,然后图片的命名方式如下图所示xxx.png,命名什么的可以自己修改成自己需要的,)

看一下处理之前的原图↓

现在附上matlab代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
for a=295:310%上面这个最外层大循环自己改需要对那个范围内的图片进行相应操作

str='C:\Users\tx\Desktop\original\'; %这里记得在最后加那个反斜杠,就在我还在想我的目标文件夹
%怎么什么都没有的时候第一次的时候发现桌面上生成了一堆。。无语了,搞得我桌面乱七八糟
if 1<=a&&a<10
f=imread(strcat(str,'00000',num2str(a),'.png'));
elseif 10<=a&&a<100
f=imread(strcat(str,'0000',num2str(a),'.png'));
else
f=imread(strcat(str,'000',num2str(a),'.png'));
end

image_gray=f;
ff=image_gray;

ff(:) = 0;
alreadyProcessed = false(size(image_gray));%生成逻辑非的矩阵
% 迭代.
Smax=7;
for k = 3:2:Smax
zmin = ordfilt2(image_gray, 1, ones(k, k), 'symmetric');
zmax = ordfilt2(image_gray, k * k, ones(k, k), 'symmetric');
zmed = medfilt2(image_gray, [k k], 'symmetric');

processUsingLevelB = (zmed > zmin) & (zmax > zmed) & ...
~alreadyProcessed;
zB = (image_gray > zmin) & (zmax > image_gray);
outputZxy = processUsingLevelB & zB;
outputZmed = processUsingLevelB & ~zB;
ff(outputZxy) = image_gray(outputZxy);
ff(outputZmed) = zmed(outputZmed);

alreadyProcessed = alreadyProcessed | processUsingLevelB;
if all(alreadyProcessed(:))
break;
end
end
ff(~alreadyProcessed) = zmed(~alreadyProcessed);
f1=imnoise(image_gray,'salt & pepper',0.3);%添加椒盐噪声后的图像
f2=medfilt2(f1,[3,3]);%中值滤波后的图像

%下面这些注释掉的也可去掉注释看一看中间结果(我因为只需要最后将图像输出到文件,所以直接注释掉了)

%subplot(2,3,1);
%imshow(image_gray);
%title('1原图');

%subplot(2,3,2);
%imshow(f1);
%title('椒盐噪声污染后的图像');

%subplot(2,3,3);
%imshow(f2);
%title('中值滤波');

%subplot(2,3,4);
%imshow(ff);
%title('2自适应中值滤波');

%subplot(2,3,5);
B=strel('square',2);%use the dilate kernal a circil
f3=imopen(ff,B);
%imshow(f3);
%title('3开运算');


f=f3;
[m,n,d]=size(f);%灰度图1维,彩色图3维
if d==1
f4=f;%复制后新的图片f1,作为改变后的图片
elseif d==3
f=rgb2gray(f);
f4=f;
end

[count,x]=imhist(f);%count表示每个灰度级别有多少个像素,x表示有多少个灰度级别

PDF=count/(m*n);%PDF表示每个灰度级别出现的概率,一共有256行
CDF=cumsum(PDF);%CDF表示逐行相加的概率,也就是累加概率

for i=1:256
xiangsuxushu=find(f==i);%原本灰度级别为i的像素在第几位
changdu=length(xiangsuxushu);
for j=1:changdu
f4(xiangsuxushu(j))=round(CDF(i)*256-1);%每一个原本灰度级别为i的像素,
%灰度级别改为累加出现概率*256
%再取整
end
end

%subplot(2,3,6);
%imshow(f4);
%title('4直方图均衡化');

%这下面三行是将上面的f4转换成RGB三通道(因为我需要对三通道图像来训练FCN,如果只是需要单通道的二值灰度图像请将下面三行进行相应改变)
%下面这几行也很好看懂就是填写目标路径,记得反斜杠
f4 = cat(3,f4,f4,f4);
stri=strcat('C:\Users\tx\Desktop\backtest\',num2str(a));
imwrite(f4,strcat(stri,'.png'));


end

​ 对比一下, 处理前图片↑ 处理过后的图片↓

​ 嗯嗯,差别还是挺大的。

坚持原创分享,您的支持将鼓励我继续创作!