基于Mathematica的图像变成黑白图片的算法原理

 时间:2024-10-13 21:27:59

1、把图片黑白化,最粗略的方法,就是图像二值化。Binarize[img]白色变白,黑色变黑,但是,透明的背景却变成了不透明的黑色。

基于Mathematica的图像变成黑白图片的算法原理

2、把图中大于等于0.66的值,用1代替,否则用0代替。Binarize[img,0.66]

基于Mathematica的图像变成黑白图片的算法原理

3、然而,上面的所谓的图img的数值,并不是指像素的数值,这可以通过下面的试验确定出来:f[x_]:=If[x<0.鲂番黟谊66,0,1]Attributes[f]={Listable};(f[#]&/@(img//ImageData))//Image上面的自定义函数f的作用,是把小于0.66的数字用0代替,否则用1代替;Attributes[f]={Listable};为函数f赋予了Listable的属性;用f作用于img对应的图片数据的每一个数值,得到新的图片数据,再转化为图片。此时,我们会得到黑白图吗?结果如下。

基于Mathematica的图像变成黑白图片的算法原理

4、原因很简单,img是三通道的图片,任意像素都有三个不同的像素值,而这三个像素值并不一定同时大于或小于0.66。这从三个通道的灰度图可以看出来:(Image[ImageData[img][[Al造婷用痃l,All,#]]])&/@{1,2,3}下面三幅图,分别是R、G、B三个通道对应的灰度图,颜色越黑,对应的色彩在原图里越深。

基于Mathematica的图像变成黑白图片的算法原理
基于Mathematica的图像变成黑白图片的算法原理
基于Mathematica的图像变成黑白图片的算法原理

5、上面也为我们提供了一个谀薜频扰得到黑白图的方法,那就是分离图片的通道,计算机就会把彩色图转化为灰度图,这其实也是黑白图。于是,我们可以这样考虑:img0=Table[Mean/@(data=ImageData[img])[[n]],{n,1,data//Length,1}]//Image取每一个像素的三个数值的平均值,就得到一个单通道图。

基于Mathematica的图像变成黑白图片的算法原理

6、如果上面的f作用于此时的图片,就会得到下图:(f[#]&/@(img0//ImageData))//Image

基于Mathematica的图像变成黑白图片的算法原理

7、这和Binarize[img0,0.66]的效果,好像是一样的。

基于Mathematica的图像变成黑白图片的算法原理
  • matlabR2017b如何解决appcrash问题?
  • Mathematica对于列表的各种操作①
  • LabVIEW导入ActiveX控件至选板
  • Matlab App Designer基本使用之表组件
  • Python编程:怎么设置tkinter按钮不可点击
  • 热门搜索
    关于劳动节的手抄报 学生手抄报 英语手抄报大全 食品安全手抄报图片 小学生清明节手抄报 民风民俗手抄报 春节手抄报字少又漂亮 秋天手抄报 2035年的祖国手抄报 我爱家乡手抄报