赞
踩
此内容其实是我当时打大作业的内容,本着开源的精神,我将其分享出来。
1.画出该图像的灰度直方图(有横坐标),指出是否可利用直方图分布的特点来分割图像。
(1)首先显示出原图像
%读入图像
f=imread('text-1.tif');
%创建一个新的画板并显示图像
figure,imshow(f);
(2)画出其灰度直方图,可以看出所有256个灰度值都有值。
%画出其直方图
figure,imhist(f);
(3)根据直方图的分布可以看出来各个灰度都有一定的分部,不太容易根据直方图中的灰度进行分隔。但是看图片可以很明显的看出有黑白相间,但是有个灰色的图标。
2.尝试用多种方法(不少于2种)对图像中的文字进行分割,并比较各种方法的优劣。
(1)使用大津算法进行分隔,可以发现使用全局的算法并不合适,因为计算的是全局平均阈值,所以把偏黑色的部分也全部处理为了黑色,无法克服这种灰度变化。
%使用大津算法处理并转为黑白图
T=graythresh(gray);
g1=im2bw(f,T);
figure,imshow(g1);
(2)使用移动平均的图像阈值函数处理后发现比大津算法优秀许多,但是依旧无法处理掉原来的灰色V图标,因为是按照一副图像的扫描线来计算平均移动,但是V图标和周围文字和白底的差异都比较大,就不能很好的去除。
%使用移动平均的图像阈值函数处理
g2=movingthresh(gray,70,0.8);
figure,imshow(g2);
(3)局部统计的可变阈值函数处理发现成功的灰色的V图标去掉了。我认为moving thresh是localthresh的一种特例,定义局部大小为3*3,设置a,b的参数经过反复调试,我认为这个效果比较好。虽然显示字体变粗了,但起码文字没有发生缺失,水印V也去掉了。
%使用局部统计的可变阈值函数处理
g3=localthresh(gray,ones(3),4.6,0.66,'local');
figure,imshow(g3);
3.尝试优化分割结果,去除边框上的黑边等
(1) 显示反转后的图像,可以看到是黑底白字白边框了
figure,imshow(~g3);
(2)这时候就可以使用imclearborder函数将连接到图像边缘的1值变为0值,从而去除这里的白边。
%将图像颜色反转去除白边
clear = imclearborder(~g3,8);
figure,imshow(clear);
(3)将二值图图像取反,即可反转图像的颜色,变为白底黑字。
%将图像颜色进行反转
rev=~clear;
figure,imshow(rev);
对下图所示医学图像中的病灶(下左图,箭头所指)进行分割,将分割出来的病灶部分用伪彩色表示(如下右图所示),彩色map可以借用hot或其他(色彩不一定与下图完全相同)。
提示:先采用合适的方法进行图像分割,再对分割出来的病灶部分赋予适当的伪彩色,再将伪彩色和灰度图像转为彩色图像后进行拼合。
(1)首先显示出原图像
%读入图像
f=imread('f0203ss.tif');
%创建一个新的画板并显示图像
figure,imshow(f);
(2)对图像做一个拉伸,其中低于灰度值低于0.5变为黑色,高于0.75变为白色,增加区分度,设置gramma参数为3,使它偏向更暗输出值,增加白色部分对比度。
%对灰度图做一个拉伸
g=imadjust(f,[0.5 0.75],[],3);
figure,imshow(g);
(3)使用imclearborder把边缘的白色部分去掉,方便后面的处理
%将图像的边界去除
clear = imclearborder(g,4);
figure,imshow(clear);
(4)使用roipoly函数进行人工选择区域,也就是只选取当中的白色块,然后点击创建掩膜
%使用人工选定区域函数
bw=roipoly(clear);
(5)将选中区域图像和清理边界后的图像使用immultiply相乘,因为任何数×0(也就是黑色)都是黑色,所以能保证新图像只有当中需要的一块是白色的
%使用图像相乘函数
newp=immultiply(clear,bw);
figure,imshow(newp);
(6)使用hot伪彩色通过ind2rgb将二维灰度图像和二维double类型颜色数组形成一个三维的伪彩色图像
%将灰度图转换为彩色图
rgb1 = ind2rgb(newp,hot(256));
figure,imshow(rgb1);
(7)由于原来的f是二维灰度图,而灰度图对应的RGB说白了就是三个维度的值都相同,所以使用cat函数使用dim参数为3,将3个二维数组合并为一个三维数组,也就是RGB图像,但是rgb1为double型,后面要做运算也要用im2double转换为double类型。
%由于f为灰度图,而彩色图本质就是3个灰度图叠加,使用cat连接
f3=cat(3,f,f,f);
%使用im2double将图像uint类型转换为double
fd=im2double(f3);
(8)然后把伪彩色图像和连接后的3个灰度图像转换为RGB的图像相加,输出即可得到结果。因为原来外面部分都是黑色不会影响其他部分,中间有彩色图像和原图像原有的RGB三维的数字相加即可把中间伪彩色颜色部分叠加,做出以下增强效果。
%把图像每个值相加
rgb_color=rgb1+fd;
figure,imshow(rgb_color);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。