使用Matlab进行图像处理
图像处理是操纵图像的数字属性以提高其质量或从图像中获得所需信息的过程。它需要在图像处理应用程序中导入图像,分析图像,然后对图像进行操作,以获得能够产生预期结果的适当输出。
在这篇文章中,我们将讨论使用Matlab进行图像处理和分析的基础知识,以确定图像特征,调整图像特征,并提高图像质量。
前提条件
在你的计算机中安装有[Matlab]。
了解[Matlab]的基础知识。
在Matlab中导入图像
导入图像包括将图像带到Matlab的当前目录中。这样就可以使用该图像了。
要进行这一操作,请打开Matlab并执行以下命令。
i = imread('name of the image;') %This will assign the image to i
imshow(i);
复制代码
![](https://img-blog.csdnimg.cn/img_convert/97901ab22f8b601f56e0b45e8cf8587d.png)
使用Matlab对图像进行增强
这是改进数字图像以获得更适合视觉显示的结果的过程。图像增强可以通过image filtering 和deblurring 。
图像过滤
这是一种图像增强的形式,强调或省略图像的选定属性。图像过滤主要涉及改变图像中某些像素的浓度。
色彩过滤使图像更有吸引力或强调某些图像像素。例如,绿色可以强调植被,而蓝色则强调水体。
这个过程可以使图像偏红、偏绿或偏蓝,这取决于所应用的浓度水平。imhist 函数给出了图像中每个像素的颜色浓度的图形演示(柱状图)。
i = imread('nyali.jpg');
imshow(i)
Red = i(:,:,1);
Green = i(:,:,2);
Blue = i(:,:,3);
temp = i;
复制代码
imhist(Red);
复制代码
![](https://img-blog.csdnimg.cn/img_convert/5d1372750ddfab92dc0c6c03596782ba.png)
imhist(Green);
复制代码
![](https://img-blog.csdnimg.cn/img_convert/d1523bb68598a1c0bfdcdcb328df2b6f.png)
imhist(Blue);
复制代码
![](https://img-blog.csdnimg.cn/img_convert/6c7990e7302306cb31b3e75b5555c141.png)
figure;
temp = i;
temp(:,:,1) = temp(:,:,1) + 100;
imshow(temp);
复制代码
![](https://img-blog.csdnimg.cn/img_convert/d7cabe005ebc35ce29ea3ba943fbc871.png)
figure;
imshow(i)
temp = i;
temp(:,:,2) = temp(:,:,2) + 100;
imshow(temp);
复制代码
temp = i;
temp(:,:,3) = temp(:,:,3) + 100;
imshow(temp);
复制代码
![](https://img-blog.csdnimg.cn/img_convert/ad3fd0aebd6d557e7400c260a8f10308.png)
图像去模糊化
通过使图像上的模糊像素变得更加清晰,来增加图像的清晰度。为了进行这项工作,我们首先使用下面的代码导入图像。
i = imread('nyali.jpg'); %this code imports the image
imshow(i)
复制代码
从原始图像创建一个模糊的图像i 。这个图像将被用作去模糊过程的模拟器。
首先,通过使用fspecial ,以指定的线性运动(在我的例子中,我将使用50个像素,角度为10度)制作一个点扩散函数(PSF),然后通过使用imfilter 函数将PSF与图像进行卷积。
PSF = fspecial('motion',50,10);
Idouble = im2double(i);
blurred = imfilter(Idouble,PSF,'conv','circular');
imshow(blurred)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/8638ea859bb28e63192be265d11bc23b.png)
使用deconvwnr 命令来恢复模糊的图像。
wnr1 = deconvwnr(blurred,PSF);
imshow(wnr1)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/f238ce5e17e81b03244d97c70c827b59.png)
获取图像中包含的物体数量
图像中包含的物体数量可以通过以下步骤确定。
去除那些不需要数值的物体。
通过去除图像的原始背景,使其具有统一的背景。
将图像改变为灰度图像。
创建图像的二进制版本,可以对要分析的对象进行数值分析。
在这个过程中使用了下面的代码片段。
i = imread('imageName'); %import the image
imshow(i)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/d30753eaddbeaeaee1aa60f7abd497e2.png)
se = strel('disk',150);
background = imopen(i,se); %Performs morphological openning
imshow(background)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/ff28cd961300d689cecb7e3e93bb235f.png)
从原始图像中去除背景近似图像。这将形成一个具有统一背景但有点暗的结果图像。
i2 = i - background;
imshow(i2)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/96fa05a3c8bb24ae3680686d8b100dac.png)
将图像格式从RGB改为灰度。新处理的图像将被分配到i3 。
i3 = rgb2gray(i2);
imshowi3
复制代码
![](https://img-blog.csdnimg.cn/img_convert/f4ae425e3fdb9912700c187cb2d0b343.png)
使用imbinarize 命令来创建灰度图像的二进制版本i3 。
bw = imbinarize(i3);
bw = bwareaopen(bw,50);
imshow(bw)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/6fa5bc2b866dca57f5086ae21c7d0259.png)
二进制版本的图像可以进行物体分析。结果的准确性取决于物体的大小、参数连通性和物体之间的间距。
请注意,绿色的物体不存在于二进制版本的图像中,因为真正的颜色(红、绿、蓝)不能被二进制化。
cc = bwconncomp(bw) % shows image information复制代码
![](https://img-blog.csdnimg.cn/img_convert/cdd27c11ddd68afeac7f507bc8953a58.png)
在图像中找到一个特定颜色的区域
在图像中具有不同颜色的物体的区域可以通过颜色阈值法用Matlab确定。阈值化是根据强度将像素分配到某些类别。
颜色阈值处理也使我们能够确定地图中选定特征的区域。例如,在卫星地图中找到一个水体的面积。
为了证明这个概念,我将从一张卫星地图图片中确定一个水体的面积。该图片的分辨率为480 * 494 像素,深度为32,按卫星计算。
i = imread('l.victoria.PNG'); %import the image
imshow(i)
复制代码
i2 = rgb2gray(i); % make a grayscale image of i
imshow(i2)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/afe840e0e065f876f32e9292d7f15c1d.png)
imhist(i2) %histogram for pixel distributions复制代码
![](https://img-blog.csdnimg.cn/img_convert/92adce864e61a6033e249b7030163cc4.png)
从直方图上看,X轴代表强度值,Y轴代表像素数。
在Matlab窗口工具栏中打开APPS,向下滚动到图像处理和计算机视觉,然后点击颜色阈值。
在新的窗口中从工作区加载一个图像,然后选择一个颜色空间,点击HSV。
![](https://img-blog.csdnimg.cn/img_convert/74495a1cc3439f927223b1dbfb796c5e.png)
调整标有H 的旋钮以去除背景色,调整S 和V 以使要分析的对象的边界平滑。
![](https://img-blog.csdnimg.cn/img_convert/127ba40ab0642146ecb856530b5db902.png)
通过点击show binary 按钮,创建一个二进制版本的结果图像。
![](https://img-blog.csdnimg.cn/img_convert/71f4f473f584cf5b702a58e8f04236dd.png)
将二进制版本导入到工作区进行进一步分析,它将被标记为BW 。二进制版本的形状与湖泊的形状相似,我们可以用函数imshowpair ,直观地比较这两幅图像。
imshowpair(i,BW,'montage')
复制代码
![](https://img-blog.csdnimg.cn/img_convert/c026f837d24a114026eb5b48991870e9.png)
为了找到二进制版本图像的图像统计,使用regionprops 函数。
stats = regionprops('table',BW,'all')
复制代码
![](https://img-blog.csdnimg.cn/img_convert/08da9352facaa329990373cf88f69380.png)
以像素为单位的区域面积是表格中的面积道具之和。
areainpixels = sum(props.Area)
复制代码
![](https://img-blog.csdnimg.cn/img_convert/c50d189f30d9b340b14f2fbdf0a0d264.png)
面积可以使用地图上可能提供的比例尺转换为平方公里。通常,比例尺有一个预先确定的数值,以米、英里或公里为单位表示。
使用imtool(i) 功能来测量线性比例尺的起点和终点之间的距离。测量值的单位是像素,它代表比例尺的预定尺寸。从像素转换到所需的单位。
总结
Matlab为图像处理提供了一个完美的环境,因为它的命令和片段很容易遵循和应用。
图像处理有广泛的应用领域,如。
摄影。
图像的地理数据分析。
装饰品。
了解生物结构。
机器视觉,和娱乐。
从图像中提取的信息的准确性取决于用于处理图像的工具的质量,Matlab为图像处理提供了更好的工具。