养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

【Mathematica基础系列】如何处理图像(二)

时间:2024-11-02 03:41:33

Mathematica是著名的科学数值编程软件,它丰富的函数库和直观化的操作方式给我们带来了极大的便利,本文将讲述通过一些科学数值处理函数对图像进行处理来使图像达到许多专业图象处理软件的效果。

【Mathematica基础系列】如何处理图像(二)

工具/原料

mathematica

方法/步骤

1、首先,作为一个觥铖鹄妇良好的操作习惯,我们在首行输入Clear["Global`*"]来清理内存中不需要的存储信息,接下来我们还是首先导入一幅需要修观鲼视防改的图片,本文中依旧导入一架直升机作为例子,导入代码为Import["C:\\Users\\xxx\\Desktop\\Jingyan\\helicopter.jpg"],然后我对他大小进行了调整i=ImageResize[%,760],表示将该图片改为760大小,而后赋值给变量i;

【Mathematica基础系列】如何处理图像(二)

2、下面我们来进行图像的对比度操作,这里介绍如何输出高对比的负片效果,这里的原理为:g=1-f,其中f为原图像,g是修改后图像,该公式表示系统对图像每一个像素进行负片操作最后输出,实际代码为:GraphicsRow[{i,ColorNegate[i]},ImageSize->Medium],运行输出之后就能看到负片效果的图片了;

【Mathematica基础系列】如何处理图像(二)

3、一般来说,ImageAdjust函数能用于执行绝大多数普遍需要的对比度伸展和幂律变换,所以这里介绍用ImageAdjust函数对图像就行线性对比度调节,具体代码为:ImageAdjust[i,1.5],作为一个参数,1.5是可以更改的;

【Mathematica基础系列】如何处理图像(二)

4、好了,知道了怎么处理线性对比度的改变,我们来考虑一下如何改变非线性对比度,我们先考虑一下一个非线性的函数,如下图所示,展示的是方差参数值不同的几个变换的图形,作为一个非线性函数,我们下一步就考虑如何将其应用到图片上去;

【Mathematica基础系列】如何处理图像(二)

5、引用上一步的函数,输入代码:ImageApply[G[#,0.5,0.1]&,i],其中G就是上述的非线性函数,我们将其应用到自己的样例图片,一下子就实现了对比度的非线性修改;

【Mathematica基础系列】如何处理图像(二)

6、有时候,我们想把一幅图修改成黑白的,那我们可以用Binarize函数来实现,该函数将图片变成二值图像,所谓二值,就是颜色只含有两种值,说白了就是黑白图像,代码为:Binarize[i],运行之后就得到我们要的黑白图了吧;

【Mathematica基础系列】如何处理图像(二)

7、有时候黑白二色又太少,原图色彩又太丰富,我们该怎么办?这时ColorQuantize函数就派上用场了,输入代码:ColorQuantize[i,3],你就可以得到下图中只含有3中色彩的图像,当然你可以修改这个数值,改成4或者5就能得到对应数值的色彩数;

【Mathematica基础系列】如何处理图像(二)

8、现在我们能做黑白图和多色图了,那我们如何修改图片能使得图片既能包含色彩,局部原色又能编程黑白二值呢,这时候我们可以使用ImageApply函数,配合UnitStep单元素操作函数,就可以实现目标啦,代码为:ImageApply[UnitStep[#-0.5]&,i];

【Mathematica基础系列】如何处理图像(二)

9、经常看到一些专业相机或者图象处理软件的高级模糊功能,这里,我将给你揭露它的原理,其实这就是一个滤波的过程,选择性地过滤掉一些色彩元素,来实现整体的模糊效果,比如输入平滑滤波代码:ImageConvolve[i,BoxMatrix[5]/121.],就可以得到如图所示的模糊效果

【Mathematica基础系列】如何处理图像(二)

10、模糊的原理知道了,我们怎么勾勒出一幅图像中主元素的轮廓呢,这时候,我们可以用函数来就算图像中每一个像素的一个小的邻域内最大的数值范围,例如,输入代码:ImageFilter[Max[Flatten[#]]-Min[Flatten[#]]&,i,1],你就可以得到下图,看,直升机的轮廓是不是很清晰了;

【Mathematica基础系列】如何处理图像(二)

11、听说过高斯模糊吧,在专业图像软件中耳熟能详的名词,其实就是和我们数学中学过的高斯函数直接挂纫栾荷痂钩的,在mathematica中,我们直接用同一个像素半径为r的Gaussian内璀煌蒈琊核卷积就可以实现图像的高斯模糊哦,看代码:Table[GaussianFilter[i,r],{r,2,12,2}],我给半径r分配了2,4,6,8,10,12六个值,输出六幅图像,观察图片可见半径r决定了高斯模糊的模糊程度;

【Mathematica基础系列】如何处理图像(二)

12、上面讲的是模糊,我们可熹栳缂靖能还需要对图像进行膨胀和腐蚀等操作,那么我们可以这样操作,在代码中输入:GraphicsRow[{Dilation[i,2],i,Erosion[i,2]},惺绅寨瞀ImageSize->Medium];就可以得到三个图像,中间是彩色原图,左边是膨胀图,右边是腐蚀图,这一期图像处理就讲这么多啦,是不是觉得已经从原理上明白了很多图像修改的本质啊,那么赶紧去用Mathematica试试吧。

【Mathematica基础系列】如何处理图像(二)

© 一点知识