当前位置:   article > 正文

使用MATLAB进行图像处理的简单的例子_csdn图像处理matlab

csdn图像处理matlab

此内容其实是我当时打大作业的内容,本着开源的精神,我将其分享出来。

示例一 手机拍摄的书页图片处理

【实现需求】

  1. 画出该图像的灰度直方图(有横坐标),指出是否可利用直方图分布的特点来分割图像
  2. 尝试用多种方法(不少于2种)对图像中的文字进行分割,并比较各种方法的优劣
  3. 尝试优化分割结果,去除边框上的黑边等

【原始图像】

在这里插入图片描述

【任务实施】

1.画出该图像的灰度直方图(有横坐标),指出是否可利用直方图分布的特点来分割图像。
(1)首先显示出原图像

%读入图像
f=imread('text-1.tif');
%创建一个新的画板并显示图像
figure,imshow(f);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
(2)画出其灰度直方图,可以看出所有256个灰度值都有值。

%画出其直方图
figure,imhist(f);
  • 1
  • 2

在这里插入图片描述
(3)根据直方图的分布可以看出来各个灰度都有一定的分部,不太容易根据直方图中的灰度进行分隔。但是看图片可以很明显的看出有黑白相间,但是有个灰色的图标。

2.尝试用多种方法(不少于2种)对图像中的文字进行分割,并比较各种方法的优劣。
(1)使用大津算法进行分隔,可以发现使用全局的算法并不合适,因为计算的是全局平均阈值,所以把偏黑色的部分也全部处理为了黑色,无法克服这种灰度变化。

%使用大津算法处理并转为黑白图
T=graythresh(gray);
g1=im2bw(f,T);
figure,imshow(g1);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
(2)使用移动平均的图像阈值函数处理后发现比大津算法优秀许多,但是依旧无法处理掉原来的灰色V图标,因为是按照一副图像的扫描线来计算平均移动,但是V图标和周围文字和白底的差异都比较大,就不能很好的去除。

%使用移动平均的图像阈值函数处理
g2=movingthresh(gray,70,0.8);
figure,imshow(g2);
  • 1
  • 2
  • 3

在这里插入图片描述
(3)局部统计的可变阈值函数处理发现成功的灰色的V图标去掉了。我认为moving thresh是localthresh的一种特例,定义局部大小为3*3,设置a,b的参数经过反复调试,我认为这个效果比较好。虽然显示字体变粗了,但起码文字没有发生缺失,水印V也去掉了。

%使用局部统计的可变阈值函数处理
g3=localthresh(gray,ones(3),4.6,0.66,'local');
figure,imshow(g3);
  • 1
  • 2
  • 3

在这里插入图片描述
3.尝试优化分割结果,去除边框上的黑边等
(1) 显示反转后的图像,可以看到是黑底白字白边框了

figure,imshow(~g3);
  • 1

在这里插入图片描述
(2)这时候就可以使用imclearborder函数将连接到图像边缘的1值变为0值,从而去除这里的白边。

%将图像颜色反转去除白边
clear = imclearborder(~g3,8);
figure,imshow(clear);
  • 1
  • 2
  • 3

在这里插入图片描述
(3)将二值图图像取反,即可反转图像的颜色,变为白底黑字。

%将图像颜色进行反转
rev=~clear;
figure,imshow(rev);
  • 1
  • 2
  • 3

在这里插入图片描述

示例二 医学图像中的病灶处理

【实现需求】

对下图所示医学图像中的病灶(下左图,箭头所指)进行分割,将分割出来的病灶部分用伪彩色表示(如下右图所示),彩色map可以借用hot或其他(色彩不一定与下图完全相同)。
提示:先采用合适的方法进行图像分割,再对分割出来的病灶部分赋予适当的伪彩色,再将伪彩色和灰度图像转为彩色图像后进行拼合。

【原始图像】

在这里插入图片描述

【任务实施】

(1)首先显示出原图像

%读入图像
f=imread('f0203ss.tif');
%创建一个新的画板并显示图像
figure,imshow(f);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

(2)对图像做一个拉伸,其中低于灰度值低于0.5变为黑色,高于0.75变为白色,增加区分度,设置gramma参数为3,使它偏向更暗输出值,增加白色部分对比度。

%对灰度图做一个拉伸
g=imadjust(f,[0.5 0.75],[],3);
figure,imshow(g);
  • 1
  • 2
  • 3

在这里插入图片描述
(3)使用imclearborder把边缘的白色部分去掉,方便后面的处理

%将图像的边界去除
clear = imclearborder(g,4);
figure,imshow(clear);
  • 1
  • 2
  • 3

在这里插入图片描述
(4)使用roipoly函数进行人工选择区域,也就是只选取当中的白色块,然后点击创建掩膜

%使用人工选定区域函数
bw=roipoly(clear);
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述
(5)将选中区域图像和清理边界后的图像使用immultiply相乘,因为任何数×0(也就是黑色)都是黑色,所以能保证新图像只有当中需要的一块是白色的

%使用图像相乘函数
newp=immultiply(clear,bw);
figure,imshow(newp);
  • 1
  • 2
  • 3

在这里插入图片描述
(6)使用hot伪彩色通过ind2rgb将二维灰度图像和二维double类型颜色数组形成一个三维的伪彩色图像

%将灰度图转换为彩色图
rgb1 = ind2rgb(newp,hot(256));
figure,imshow(rgb1);
  • 1
  • 2
  • 3

在这里插入图片描述
(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);
  • 1
  • 2
  • 3
  • 4

(8)然后把伪彩色图像和连接后的3个灰度图像转换为RGB的图像相加,输出即可得到结果。因为原来外面部分都是黑色不会影响其他部分,中间有彩色图像和原图像原有的RGB三维的数字相加即可把中间伪彩色颜色部分叠加,做出以下增强效果。

%把图像每个值相加
rgb_color=rgb1+fd;
figure,imshow(rgb_color);
  • 1
  • 2
  • 3

在这里插入图片描述

示例采用原图

https://pan.baidu.com/s/1v7NVxvBOorGN_WE4Zo-2IA?pwd=r98j

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/375356?site
推荐阅读
相关标签
  

闽ICP备14008679号