版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本教程将介绍如何导入图像并观察其属性、拆分图层以及查看灰度。在正式开始
之前,我们先来了解一些关于像素的基础知识。
计算机将图片以像素形式存储,这就像马赛克一样。如果像素太大,很难制作光
滑的边缘和曲线。相反,我们使用的像素越多越小,看起来就会越平滑,或者说
像素化程度越小,图像就会越好看,有时,这也被称为图像分辨率。
矢量图形是一种有点不同的存储图像方法,旨在避免与像素相关的问题。但是,
即使是矢量图像,最终也会显示为像素一样的马赛克。颜色像素表示图像元素,
描述每个像素的简单方法是使用三种颜色的组合,即红色,绿色,蓝色,这就是
我们所说的RGB图像.
在RGB图像中,每个像素分别与红色,绿色,蓝色的值相关联的三个8比特数
字表示。最后,如果使用放大镜观察缩放的图片,我们会看到图片由微小的光点
或更具体的像素组成,更有趣的是这些小光点实际上具有多个不同颜色。
每张照片都以数字形式由像素组成,它们是构成图片的最小信息单位,通常是圆
形或方形,它们通常布置在二维网格中。
23x22«506Pixels
Eachpixelcoordinate(x,y)contains3valuesrangingforintensitiesof0to255(8btt)
-Red-Green-Blue
Mixingdifferentintensitiesofeachcolorgivesusthefullcolorspectrum.
OnePixelConsist
With3Channels/
Layers
Rchannel
Range:0-255
Range:0-255◎rm后惶客
如果三个颜色都处于最大值,则意味着它们是255,那就会显示为白色,如果三
种颜色都处于最小值,或者值为0,则颜色显示为黑色。反过来,这三者的组合
将为我们提供特定的像素颜色。由于每个颜色数字都是8个比特,因此值范围为
0-255o
Decimal
RGB
9511748
DarkGreen
R:37.3%Binary
G:45.9%
B;18.8%
R:01011111
G:011-|0101
B:00110000
姆客
由于每个值可以具有256个不同的强度或亮度值,因此三种颜色总共有168()万
个shadeo
以下是Numpyand非常基本的图像数据分析步骤,其中一些涉及Pythonpacakges,
如imageio,matplotlib等。
"导入图像并观察其属性
・拆分图层
■Greyscale
对像素值使用逻辑运算符
使用逻辑运算符进行运算
卫星图像数据分析
导入图像
现在让我们加载图像并观察各种属性:
1.if_name—=='—main—
2.importimageio
3.importmatplotlib.pyplotaspit
4.%matplotlibinline
5.pic=imageio.imrcad('F:/dcmo_2.jpg')
6.plt.figure(figsize=(15,15))
7.plt.imshow(pic)观察图像的基本属性
8.print('Typeoftheimage:*,type(pic))
9.print('Shapeoftheimage:{}'.format(pic.shape))
10.print('ImageHight{},.format(pic.shape[0]))
11.print('ImageWidth{}'.format(pic.shape[l]))
12.print('DimensionofImage{}'.format(pic.ndim))
13.Typeoftheimage:<class'imageio.core.ntil.Image^
14.Shapeoftheimage:(562,960,3)
15.ImageHight562
16.ImageWidth960
17.DimensionofImage3
ndarray的形状表明它是一个三层矩阵,这里的前两个数字是长度和宽度,第三
个数字(即3)是三层:Red,Green,Blueo因此,如果我们计算RGB图像的大
小,则总大小将计为heightxwidthx3
1.print('Imagesize{l'.fonnat(pic.size))
2.print('MaxiniumRGBvalueinthisimage()'.format(pic.max()))
3.print('MinimumRGBvalueinthisimage{}'.fbrmat(pic.min()))
4.Imagesize1618560
5.MaximumRGBvalueinthisimage255
6.MinimumRGBvalueinthisimage0
这些值对于验证很重要,因为8比特颜色强度不能超出0到255范围。
现在,使用图片分配变量,我们还可以访问图片的任何特定像素值,并进一步访
问每个RGB通道。
1.
2.Let'spickaspecificpixellocatedat100thRowsand50thColumn.
3.AndviewtheRGBvaluegradually.
4.
5.pic[100,50]
6.Image。109,143,46J,dtypc=uint8)
在这种情况下:R=1()9;G=143;B=46,我们可以意识到这个特殊像素中有很
多绿色。现在,我们可以通过给出三个通道的索引值来特别选择其中一个数字:
-()红色通道的索引值
・1绿色通道的索引值
-2蓝色通道的索引值
但是,在OpenCV中,图像不是RGB而是BGR,imageio.imread将图像加或为
RGB(或RGBA),但OpenCV假定图像为BGR或BGRA(BGR是默认的OpenCV
颜色格式)。
1.#AspecificpixellocatedatRow:100;Column:50
2.#Eachchannel'svalueofit,graduallyR,G,B
3.print('ValueofonlyRchannel{),.format(pic[100,50,()]))
4.print('ValueofonlyGchannel{),.format(pic[100,50,1]))
5.print('ValueofonlyBchannel{),.format(pic[100,50,2]))
1.ValueofonlyRchannel109
2.ValueofonlyGchannel143
3.ValueofonlyBchannel46
好的,现在让我们快速查看整个图像中的每个频道。
1.plt.title('Rchannel')
2.plt.ylabel('Height{}*.format(pic.shape[0]))
3.plt.xlabel('Width{}'.fonnat(pic.shape[1]))
4.plt.imshow(pic[:,:,0])
5.plt.show()
Rchannel
01
■
0200400600800
Width960
1.plt.titlc('Gchannel)
2.plt.ylabel('Height{),.fonnat(pic.shape[0]))
3.plt.xlabel('Width{}'.format(pic.sh叩e[l]))
4.plt.imshow(pic[:,:,1])
5.plt.show()
Gchannel
0
o
N20
930
S40o
币
工
o
0200400600800
Width960
创TPD溯客
1.plt.titlcCBchanncF)
2.plt.ylabeKHeight{}.fonnat(pic.shape|()]))
3.plt.xlabel('Width{},.fonnat(pic.shape[l]))
4.plt.imshow(pic[:,:,2])
5.plt.show()
Bchannel
0
o
Z
9
S
N
620o
a30
H40
o
500
0200400600800
Width960
现在,我们可以更改RGB值的数量。例如,让我们对红色、绿色、蓝色图层设
置跟随行值的强度。
・R频道:行・100到110
-G频道:行-200至IJ210
■B频道:行-300到310
我们将加载一次图像,以便可以同时显示每个层的变化。
1.pic=imageio.imread('H/demo_2.jpg')
2.pic[50:150,:,0]=255#fullintensitytothosepixefsRchannel
3.plt.figure(figsize=(10,10))
4.plt.imshow(pic)
5.plt.show()
1.pic[200:300,:,1]=255#fullintensitytothosepixel'sGchannel
2.plt.figure(figsize=(10,10))
3.plt.imshow(pic)
4.plt.show()
1.pic[350:450,:,2]=255#fullintensitytothosepixel'sBchannel
2.plt.figure(figsize=(10,1()))
3.plt.iinshow(pic)
为了更清楚,让我们也改变列部分,这次我们将同时更改RGB通道。
1.#setvalue200ofallchannelstothosepixelswhichturnsthemtowhite
2.pic[50:450,400:600,[0,1,2]]=200
3.plt.figure(figsize=(10,10))
4.plt.imshow(pic)
5.plt.show()
0
100
200
300
400
500
0200400600800
拆分图层
现在,我们知道图像的每个像素都由三个整数表示,将图像分割成单独的颜色分
片只需拉出图像阵列的正确切片。
1.importnumpyasnp
2.pic=imageio.imread('F:/demo_2.jpg')
3.fig,ax=plt.subplots(nrows=1,ncols=3,figsize=(15,5))
4.forc,axinzip(range(3),ax):
5.#createzeromatrix
6.splitting=np.zeros(pic.shape,dtype="uint8")#'dtype'bydefault:'numpy.float64'
7.#assingeachchannel
8.split_img[:,:,c]=pic[:,c]
9.#displayeachchannel
1().ax.imshow(split_img)
200400€0080002004006008000200400€00喇仃却说.客
灰度
黑白图像存储在二维阵列中,有两种类型的黑白图像:
・Greyscale:灰色阴影范围:0-255
■Binary:像素为黑色或白色:0或255
现在,Greyscaling是一个将图像从全色转换为灰色阴影的过程。在图像处理工具
中,例如:在OpenCV中,许多功能在处理之前使用灰度图像,这样做是因为它
简化了图像,几乎可以降噪并增加处理时间,因为图像中的信息较少。
在python中有两种方法可以将图像转换为灰度,但使用matplotlib的简单方法是
使用此公式获取原始图像的RGB值的加权平均值。
1.Y'=0.299R+0.587G+0.114B
1.pic=imagcio.imrcad('F:/dcmo_2.jpg')
2.gray=lambdargb:np.dot(rgb[...,:3],[0.299,0.587,0.114])
3.gray=gray(pic)
4.plt.figure(figsize=(10,10))
5.plt.imshow(gray,cmap=plt.gct_cmap(name='gray'))
6.plt.show()
然而,GIMP将颜色转换为灰度图像软件有三种算法来完成任务。
灰度的Lightness等级计算为
1.Lightness=%x(max(R,G,B)+min(R,G,B))
灰度的Luminosity等级计算为
1.Luminosity=0.21xR+0.72xG+0.07xB
灰度的Average计算为
1.AverageBrightness=(R+G+B)-r3
让我们尝试一下算法,Luminosity效果如何?
1.pic=imageio.imread('F:/demo_2.jpg')
2.gray=lambdargb:np.dot(rgb|...,:3],|0.21,0.72,0.07])
3.gray=gray(pic)
4.plt.figure(figsize=(10,10))
5.plt.imshow(gray,cmap=plt.get_cmap(name='gray'))
6.plt.shovv()
7.
8.Let'stakeaquickoverviewsomethechangedpropertiesnowthecolorimage.
9.Likeweobservesomepropertiesofcolorimage,samestatementsareapplying
10.nowforgrayscaledimage.
ll.,n
12.print('Typeoftheimage:',type(gray))
13.print()
14.print('Shapeoftheimage:{)'.format(gray.shape))
15.print('ImageHight{}'.format(gray.shape[0]))
16.print('IrnageWidth{}'.format(gray.shape[1]))
17.print('DimensionofImage{),.foiTnat(gray.ndim))
18.print()
19.print('Imagesize{),.fonnat(gray.size))
20.print('MaximumRGBvalueinthisimage{}'.format(gray.max()))
21.print('N4inimumRGBvalueinthisimage{J'.formatCgray.minO))
22.printCRandomindexes[X,Y]:{}*.format(gray[100,50]))
23.Typeoftheimage:<class'imagcio.corc.utiLImagc'>
24.Shapeoftheimage:(562,960)
25.ImageHeight562
26.ImageWidht960
27.DimensionofImage2
28.Imagesize539520
29.MaximumRGBvalueinthisimage254.9999999997
30.MinimumRGBvalueinthisimage0.0
31.Randomindexes[X,Y]:129.07
使用逻辑运算符处理像素值
我们可以使用逻辑运算符创建相同大小的bullionndarray。但是,这不会创建任
何新数组,它只是将值返回到其主变量。例如,如果考虑在RGB图像中滤除一
些低值像素或高值或(任何条件),可以先将RGB转换为灰度。
首先加载图像并在屏幕上显示:
1.pic=imageio.imread('F:/demo_1.jpg')
2.plt.figure(figsize=(10,10))
3.pll.imshow(pic)
4.plt.shovv()
接下来,我们考虑转储该图像,比如我们想要过滤所有低于20的像素值。为此,
我们将使用逻辑运算符执行此任务,返回所有索引的True值。
1.low_pixel=pic<20
2.#toensureofitlet'scheckifallvaluesinlow_pixclarcTrueornot
3.iflow_pixeLany()==True:
4.print(low_pixel.shape)
5.(1079,1293,3)
正如上文所说,传统上不使用宿主变量,但我之所以提到是因为它只保留True
值。所以,如果我们看到low_pixel和pic的sh叩e,我们会发现它们都具有相
同的shape。
1.print(pic.shape)
2.print(low_pixel.shape)
3.(1079,1293,3)
4.(1079,1293,3)
我们使用全局比较运算符为所有小于20()的值生成低值滤波器。但是,我们可以
使用此low_pixel数组作为索引将这些低值设置为某些特定值,这些值可能高于
或低于先前的像素值。
1.#randomlychooseavalue
2.importrandom
3.#loadtheorginalimage
4.pic=imageio.imread('F:/demo」.jpg')
5.#setvaluerandomlyrangefrom25to225-thesevaluealsorandomlychoosen
6.pic[low_pixel]=random.randint(25,225)
7.#displaytheimage
8.plt.figure(figsize=(10,10))
9.plt.imshow(pic)
10.plt.show()
0
20040060080010001200酊M3睥容
图层蒙版
图像蒙版是一种图像处理技术,用于去除具有模糊边缘,透明或头发部分的照片
背景C
现在,我们将创建一个圆盘形状的蒙版。首先,我们将测量从图像中心到每个边
界像素值的距离。我们设置一个比较方便的半径值,然后使用逻辑运算符创建一
个圆盘,以下为代码:
1.if_name—=='—main_*:
2.#loadtheimage
3.pic=iinageio.imread('F:/demo_1.jpg')
4.#seperatetherowandcolumnvalues
5.total_row,total_col,layers=pic.shape
6.,n
7.Createvector.
8.Ogridisacompactmethodofcreatingamultidimensional-
9.ndaiTayoperationsinsinglelines.
1().forex:
11.»>ogridf0:5,0:51
12.output:[array([[0],
13.1U,
14.[2],
15.[3],
16.[4]]),
17.array([[0,1,2,3,4]])]
18.”'
19.x,y=np.ogrid[:total_row,:total_col]
20.#getthecentervaluesoftheimage
21.cen_x,cen_y=total_row/2,total_col/2
22.m
23.Measuredistancevaluefromcentertoeachborderpixel.
24.Tomakeiteasy,wecanthinkit'slike,wedrawalinefromcenter-
25.toeachedgepixelvalue—>s**2=(Y-y)**2+(X-x)**2
26.切
27.distance_from_the_center=np.sqrt((x-cen_x)**2+(y-cen_y)**2)
28.#Selectconvenientradiusvalue
29.radius=(toial_row/2)
30.#Usinglogicaloperator'>'
31.m
32.logicaloperatortodothistaskwhichwillreturnasavalue
33.ofTrueforalltheindexaccordingtothegivencondition
34.,n
35.circular_pic=distance_from_the_center>radius
36.
37.letassignvaluezeroforallpixelvaluethatoutsidethecirulardisc.
38.Allthepixelvalueoutsidethecirculardisc,willbeblacknow.
39.
40.pic[circular_pic]=0
41.plt.figure(figsize=(10,10))
42.pll.imshow(pic)
43.plt.show()
卫星图像处理
卫星图像及其处理系统非常有用,我们可以用于做一些分析任务。
1.#loadtheimage
2.pic=imageio.imread('F:satimg.jpg')
3.plt.figure(figsize=(10,10))
4.plt.imshow(pic)
5.plt.show()
3500
4000令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏淮安市清江浦区柳树湾街道公益性岗位 (第二批)招聘4人笔试模拟试题及答案详解
- 2026湖北铜化昊坤化工有限公司招聘25人笔试备考题库及答案详解
- 2026年河北雄安新区容东片区兴安社区卫生服务中心公开招聘工作人员21名笔试模拟试题及答案详解
- 2026重庆市万盛经开区规划和自然资源局公益性岗位招聘1人笔试备考试题及答案详解
- 线上客户细分信息处理服务合同
- 国际贸易2026年国际货运保险合同协议
- 2026四川大学华西医院上锦医院招聘医生岗位笔试备考试题及答案详解
- 2026山西大同浑源县公益性岗位招聘笔试备考题库及答案详解
- 教案嵌入式应用基础(项目1第2周)
- 2026山东石油化工学院招聘7人笔试模拟试题及答案详解
- 国家能源投资集团有限责任公司高校毕业生招聘考试真题2025
- 2025年山东德州市初二学业水平地理生物会考试题题库(答案+解析)
- 第2课《周总理你在哪里》教学设计 2026-2027学年统编版语文九年级上册
- 2026年监理工程师工作实务手册
- 2026年浙江省公开遴选公务员笔试试题及答案解析(综合类)
- GJB827B--2020军事设施建设费用定额
- 2025年全国统一高考数学试卷(全国一卷)含答案
- 年产5万吨硫酸法钛白粉生产工艺设计实现可行性方案
- 13诗第十二-整本书阅读系列《经典常谈》名著阅读与练习
- GB/T 8262-1987圆头椭圆颈螺栓
- 杀鼠剂中毒-课件
评论
0/150
提交评论