图像基础&ImageMagick图像处理

lena-数字图像处理的趣闻轶事

先看图,原图有点sexy

lena

原图: http://www.lenna.org/full/l_hires.jpg

来源

1972年11月出版的Playboy的中间插页,最畅销的一期,她之前是瑞典的的模特。

1973年6月,美国南加州大学的一名教授- William K. Pratt威廉·k·普拉特博士,想找一幅图像来做图像压缩的测试,厌倦手头的繁杂照片,需要让人眼前一亮的照片,正好有人在看杂志,他偶然看见了,就截取了一部分,从此,这幅512*512的经典图像就诞生了。

与playboy的版权问题

20年后才发现并维权,但以喜剧收场。

46年后对比图:

lena对比

流行原因

测试样图

(1)鉴别度高,该图适度的混合了细节、平滑区域、阴影和纹理,从而能很好的测试各种图像处理算法。

(2)Lena是个美女,对于图像处理界的研究者(大部分都是男性)来说,美女图可以有效的吸引他们来做研究,让人赏心悦目。

数字图像类型–图像存储风格

包括位图和矢量图

位图

raster-image-pixels.gif

矢量图 -通俗一点来讲就是很多人常说的放大不模糊的特点

vector-image-shapes.gif

位图
  1. 使用彩色像素阵列存储和处理的图像,最小单位由像素构成的图,只有点的信息,每个像素都分配有特定的位置和颜色值,缩放时会失真;
  2. 图形面积越大,文件的字节数越多,文件的色彩越丰富,文件的字节数越多;
  3. 图像可以由代表不同颜色的多个通道组成,并且在一个图像文件格式文件中可以有多个图像、图层或帧(取决于用途);
  4. 格式: GIF、PNG、JPEG、TIFF、BMP、WebP。

真实性、透明性、矢量性

  1. 真实性就是色彩度、位深、损耗(压缩)等;(jpg、jpeg、gif、tiff、bmp)
  2. 透明性就很明显了,就是支技透明的特性,但这里也有一个就是位深,他会影响透明度的深度png8与png24的差异就在这里;(png)
  3. 特殊动画,就是支持帧的特点,可以做成动画;(gif)
视觉质量
colorspace

colorspace.jpg

sRGB --standard 微软惠普推出,目的是让外部设备与应用软件共通,应用最广泛;和RGB区别主要在于厂家、色域范围和适用人群方面不同

RGB – Adobe推出,艺术创作,色域更加丰富

CMYK – 印刷,比RGB颜色暗淡一些

aRGB VS sRGB

aRGB-vs-sRGB.png

profile
  • EXIF 相机相关元数据,如品牌、光圈、快门
  • ICC 图像颜色空间配置信息 RGB sRGB CMYK
  • IPTC 图像的标识属性,如标题、署名、作者、关键字等图片和作者信息
  • 8BIM ps元数据配置信息

IM通过-profile + 配置文件来增加, +profile来删除,删除后图片会变小,但效果看起来差不多,对于一些需要极限压缩的,这些profile信息没必要可以删除

profile.png

quality
  • 对JPEG而言,图片质量在1~100,如果不指定图片质量,默认92,如png转jpg后不指定图片质量默认92;当质量小于90时,会进行色度二次采样,4:4:2 -> 4:4:0
  • 保存时会降低质量保存,在内存中和最终保存的不一致,特定像素和区域处理后的与保存的也有所不同,尤其是在边缘区域

对于IM处理过程中避免质量降低的方案:

  • 不以JPEG作为中间图像,而作为最终保存图像
  • 处理过程中强制指定图片质量

质量对比:q99 vs q85 vs q75

quality.png

depth

8只、24只蜡笔绘制日落的例子来理解

常见的是8bitdepth,使用2^8-1的值来保存颜色,即0-255,8bit/pixel
8bit 三通道约有1680万种颜色 10bit 三通道约有10.7亿种

8vs10depth.png

color channel

保存图像颜色信息的通道称为颜色通道,每个颜色通道都存放着图像中颜色元素的信息,所有颜色通道中的颜色叠加混合产生图像中像素的颜色,相当于调色板几种颜色混合在一起产生一种新颜色。

单个颜色通道8bit
三个颜色通道3x8bit RGB
三个颜色通道+alpha通道 4x8bit RGBA

alpha channel

表示颜色透明度与不透明度,用于确定一个像素叠加到另一个像素如何呈现
0.0-1.0、0%-100%或1-255表示,8bit的就是RGBA, 1bit就是gif或PNG8的透明表示,即布尔透明

alpha.png

格式介绍
JPEG

.jpg .jpeg
压缩标准或者文件格式

有损压缩,因为使用有损压缩的一个关键原则是:人类的感知能力并没有计算机那么精确;
舍弃掉人眼根本无法感知的颜色信息,以使文件尽可能小并且细节不丢失,相对而言质量要比PNG、BMP质量低些,但是加载速度快

不处理透明度
有损压缩,图片数据丢失,图片会失真
IM中图片质量和文件大小不会完全匹配

PNG

.png
支持透明、半透明、不透明
无损压缩
PNG图片多用于网页中的图标设计

特点:

  • PNG同时还支持真彩和灰度级图像的Alpha通道透明度
  • 最高支持24位真彩色图像以及8位灰度图像
  • 支持Alpha通道的透明/半透明特性
  • 支持图像亮度的Gamma校准信息
  • 支持存储附加文本信息,以保留图像名称、作者、版权、创作时间、注释等信息
GIF

.gif
此格式旨在最终取代旧格式,如 GIF 和 TIFF,相对较新
特点:单通道、8位深、256种颜色、布尔(开/关)透明度会出现锯齿
相对较小,多用于卡通动画、logo图标等

TIFF

.tif .tiff
标签图像文件格式
特点:是一种灵活的位图格式,和PSD类似,主要用来存储包括照片和艺术图在内的图像,存贮多达24个通道的信息,它所包含的有关的图形信息最全;
TIFF文件,用于欣赏、打印和继续修改,JPEG用于分享

PSD/PSB

.psd .psb
PSD是Photoshop Document的缩写,简而言之,就是Photoshop原生的文件储存格式,用于保存Photoshop修改后的文件
可以保存图层、alpha通道、蒙版的具体操作步骤
缺点不能超过2G

BMP

.bmp
bitmap WindowsOS中标准图像文件格式
图像深度depth可选,1bit、4bit、8bit、24bit
除了图像深度可选,不采用其他压缩,所以BMP文件占用空间大

WebP

.webp
google的,JPEG 的升级版,由于传统的图片格式,如 JPEG,PNG,GIF 等格式图片已经没有太多的优化空间而产生;
WebP 图片格式能够进行帧内压缩,或者更确切地说,能将视频的每个帧都被压缩,再压缩帧与帧之间的差异。

优点:更优的图像压缩算法,带来更小的体积,同等质量下,web能够减少40%的体积,意味如果Google让WebP格式得到普及的话,浏览网页的速度将大幅提升。
缺点: 支持度低,下载下来的WebP图片无法通过常规软件编辑、浏览。

矢量图
  1. 图像是根据线条、粗细、平铺、渐变等复合对象来定义的,与像素无关;
  2. SVG、Postscript、PDF、FIG、DXF、WMF,TTF字体;
  3. 调整图像大小而不会失真。
IM的应用 - 为正确的工作使用正确的工具

IM是光栅图像处理器,对于矢量图不能够很好的支持,可以通过内部相互转化,但是IM 基本上会以当前定义的分辨率或密度对该图像进行光栅化,换句话说,IM 的任何输出都不会是真正的矢量格式。

基本操作,采用src.jpg是lena原图:

crop

convert通过crop参数裁剪图片,格式为:

convert 原始图片 -crop widthxheight+X+Y 目标图片

具体指令如下:

convert src.jpg -crop 100x100+10+5 crop1.jpg

convert src.jpg[100x100+10+5] crop1.jpg
crop2.jpg

上面两个指令效果相同,都是在src图片上裁剪一个100x100大小的图片,开始坐标为(10,5)

通过gravity可以选择裁剪的相对位置,即坐标原点。

convert src.jpg -gravity center -crop 100x80+0+0 crop2.jpg

convert src.jpg -gravity southeast -crop 100x80+10+5 crop2.jpg
crop2.jpg

gravity的值包括:center、south、north、east、west、southeast、southwest、northeast、northwest。如果使用gravity,把其设置center,即把中心作为坐标的原点,那么根本不需要计算起始坐标点,ImageMagicK会自动把小图片放置在背景的正中央位置,-geometry默认是+0+0。gravity不仅影响父元素的坐标系统**,而且子元素的重心点(或者叫参照点)也随之改变**。举例来说,当gravity值为southeast,父元素的坐标原点变为右下角了,x轴方向是从右到左,y轴方向从下到上;子元素重心点也是右下角,所以geometry设置的坐标点就是子元素的右下角相对父元素右下角的位置。gravity会影响通过geometry、annotate、region等来定义坐标点。

resize

convert通过resize参数裁剪图片

等比缩放

convert -resize 200x100 src.jpg resize1.jpg
resize2.jpg

把原图等比缩放为200x100的图片,但是dest.jpg不一定为200x100,因为等比缩放,dest.jpg图片大小取决于原始图比例。原则是缩放后的尺寸最少有一个符合指定宽高,且另外一边不能大于指定的参数中的宽或高,另外也可以只指定宽或高来进行缩放,缩放后和原图比例相同相同

固定宽高缩放

像素后面加!,相当于强制缩放。

convert -resize 200x100! src.jpg resize2.jpg
resize2.jpg

draw

convert通过draw可以在已有的图片上绘制一些文字、线条、形状等。可能会用text、line、rectangle、roundRectangle、circle、ellipse等。

文本text

基本命令格式:convert 原图片 -draw “text x坐标,y坐标 ‘文本信息’” 结果图片,另外还可有一些参数是可以设置的,比如字体,字体大小,字体颜色已经重新定义坐标原点。

convert src.jpg -gravity southwest -fill red -pointsize 30 -draw "text 10,10 '121212'" draw_text.jpg'
draw_line

线条line

基本命令格式:convert 原图片 -draw “line 起点x坐标,起点y坐标 终点x坐标,终点y坐标’” 结果图片,可以使用的参数有-stroke 来指定线条的颜色,-strokewidth 指定线的宽度。

convert src.jpg -stroke red -strokewidth 4 -draw "line 10,10 200,200 " draw_line.jpg
draw_line.jpg

矩形rectangle

rectangle绘制直角矩形 ,-stroke 来指定线条的颜色,-strokewidth 指定线的宽度, -fill指定填充颜色,可用none设置为不填充颜色,Rectangle 与roundRectangle 后第一组参数是确定矩形左上角的坐标,第二组是确定右下角的坐标,roundRectangle的第三组参数是确定圆角的幅度,如果是0,0话,就是直角,所以可以直接用roundRectangle 来代替Rectangle 。

convert src.jpg -stroke red -strokewidth 2 -fill none -draw "rectangle 100,100 500,400" draw-rect1.jpg
draw_rect2.jpg

roundRectangle绘制圆角矩形

convert src.jpg -stroke red -strokewidth 2 -fill white -draw "roundRectangle 100,100 500,400 10,10" draw_rect2.jpg
draw_rect2.jpg

圆circle、ellipse

同矩形一样,参数-stroke 来指定边框的颜色,-strokewidth 指边框的宽度,-fill填充颜色,可以用none设置为不填充任何颜色。circle和ellipse中的第一组参数都是代表圆心的坐标;但是他们第二组参数含义不同,circle的第二组参数是圆的任何一边缘坐标,所以圆的半径就是两组坐标的距离,ellipse的第二组参数中的第一个是横向的最大长度、第二个是纵向最大高度;第三组参数是绘制的区间,区间是0~360度,0度是原点开始到从左到右,度数是顺时针方向。有了这个参数就可以很容易绘制半圆,1/4圆,乃至圆的任何一部分,所以ellipse比circle的功能更加强大

convert src.jpg -stroke black -strokewidth 1 -fill '#00CED1' -draw "circle 250,250 250,300" draw_circle.jpg
draw_circle.jpg

convert src.jpg -stroke black -strokewidth 1 -fill green -draw "ellipse 250,250 50,50 0,360" draw_ellipse1.jpg
draw_ellipse1.jpg

以上两个命令对同一张图而言绘制的圆大小完全一样

convert src.jpg -stroke black -strokewidth 1 -fill green -draw "ellipse 250,250 50,150 0,360" draw_ellipse2.jpg
draw_ellipse2.jpg

convert src.jpg -stroke black -strokewidth 1 -fill green -draw "ellipse 250,250 50,150 0,200" draw_ellipse3.jpg
draw_ellipse3

watermark
图片水印

convert src.jpg crop2.jpg -gravity southeast -geometry +5+10 -composite watermark.jpg
watermark

文字水印

和绘制文本一样
convert src.jpg -gravity southeast -fill yellow -pointsize 25 -draw "text 10,10 'http://www.lenna.org/full/l_hires.jpg'" watermark_text.jpg
watermark_text.jpg

mpr(Memory Program Register)

mpr将整个图像写入命名的内存寄存器中,以后可以从中读取图像数据而不用重新从磁盘中读取,对于复杂的图像操作尤为重要;

好处:

  • 避免了多次保存图片导致质量降低
  • 避免了多次从磁盘读取产生的大量IO

格式 mpr:{label} ,label可以随意命名,就是一个标签;
convert src.jpg -resize 1000x1000 -write mpr:hh +delete mpr:hh -strip -crop 800x800+100+100 resize_crop.jpg
+delete删除当前图像序列中的最后一个图像,这里就是src。
resize_crop

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值