数字图像处理:图像缩放和降低灰度级
打开、显示、存储图片
用Python版OpenCV实现
image = cv2.imread("images/2_20_a.jpg", cv2.IMREAD_UNCHANGED)
cv2.imwrite("images/full.jpg", image, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cv2.imshow("image", image)
cv2.waitKey(0)
打开图片后,可以看图片由矩阵构成,shape显示了图片的行高和列宽,打开的是一幅灰度图片,因此只有一个通道
显示图片:
保存:
未经压缩,该图片占444 * 338 * 8bit = 444 * 338 B = 146.5KB
原图在磁盘占20.1KB
保存的图片占53.6KB
图像缩放
最近领域插值
h h h, w w w, h 0 h_0 h0, w 0 w_0 w0 分别为原图高、宽,和目标高、宽
g ( x , y ) g(x, y) g(x,y)为新图像x行y列的灰度等级, f ( x , y ) f(x, y) f(x,y)为原图像
g ( x , y ) = f ( x h h 0 , y w w 0 ) ( 1 ) g(x, y) = f(\frac{xh}{h_0}, \frac{yw}{w_0}) (1) g(x,y)=f(h0xh,w0yw)(1)
或从原图像对应目标图像
g ( x h 0 h , y w 0 w ) = f ( x , y ) ( 2 ) g(\frac{xh_0}{h}, \frac{yw_0}{w}) = f(x, y) (2) g(hxh0,wyw0)=f(x,y)(2)
在(1)式中,假如 h h 0 > 1 \frac{h}{h_0} > 1 h0h>1 缩小图像
在(2)式中,若g(x, y)为原图像,f(x, y)为新图像,则 h 0 h < 1 \frac{h_0}{h} < 1 hh0<1 放大图像
出现小数时,取整。
Python关键代码:
def nearest(img, size):"""Nearest neighbor interpolation:param img: source image:param size: (height, width):return: destination image"""re = np.zeros([size[0], size[1], 1], np.uint8)for x in range(size[0]):for y in range(size[1]):new_x = int(x * (img.shape[0] / size[0]))new_y = int(y * (img.shape[1] / size[1]))re[x, y] = img[new_x, new_y]return re
双线性插值
对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为 ( i + u , j + v ) (i+u,j+v) (i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值 f ( i + u , j + v ) f(i+u,j+v) f(i+u,j+v) 可由原图像中坐标为 ( i , j ) , ( i + 1 , j ) , ( i , j + 1 ) , ( i + 1 , j + 1 ) (i,j), (i+1,j), (i,j+1), (i+1,j+1) (i,j),(i+1,j),(i,j+1),(i+1,j+1)所对应的周围四个像素的值决定,即:
g ( x , y ) = f ( x h h 0 , y w w 0 ) = f ( i + u , j + v ) = ( 1 − u ) ( 1 − v ) f ( i , j ) + ( 1 − u ) v f ( i , j + 1 ) + u ( 1 − v ) f ( i + 1 , j ) + u v f ( i + 1 , j + 1 ) g(x, y) = f(\frac{xh}{h_0}, \frac{yw}{w_0}) = f(i+u, j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) g(x,y)=f(h0xh,w0yw)=f(i+u,j+v)=(1−u)(1−v)f(i,j)+(1−u)vf(i,j+1)+u(1−v)f(i+1,j)+uvf(i+1,j+1)
出现小数时考虑周围情况,离哪个点进,那个点发挥的作用就更大。
Python关键代码:
def bilinear(img, size):"""Bilinear interpolation:param img: source image:param size: (height, width):return: destination image"""re = np.zeros([size[0], size[1], 1], np.uint8)for x in range(size[0]):for y in range(size[1]):new_x = x * (img.shape[0] / size[0])new_y = y * (img.shape[1] / size[1])i = int(new_x)j = int(new_y)u = new_x - iv = new_y - jif i + 1 >= img.shape[0]:i = img.shape[0] - 2if j + 1 >= img.shape[1]:j = img.shape[1] - 2# f(i+u,j+v)=(1−u)(1−v)f(i,j)+(1−u)vf(i,j+1)+u(1−v)f(i+1,j)+uvf(i+1,j+1) re[x, y] = (1-u)*(1-v)*img[i, j]+ (1-u)*v*img[i, j+1] + u*(1-v)*img[i+1, j] + u*v*img[i+1, j+1]return re
结果:
从左到右
图一:原图
图二:用最近领域插值缩放0.5,再扩大2倍,恢复原图大小
图三:用双线性插值缩放0.5,再扩大2倍,恢复原图大小
图四:OpenCV.resize缩放0.5,再扩大2倍,恢复原图大小
缩放倍数为0.2,再恢复原大小时
OpenCV的效过较好,双线性插值其次,最近领域插值效果非常差。
降低灰度分辨率
下面函数先量化到level+1级,再量化至256级以显示
def reduce_intensity_levels(img, level):img = cv2.copyTo(img, None)for x in range(img.shape[0]):for y in range(img.shape[1]):si = img[x, y]ni = int(level * si / 255 + 0.5) * (255 / level)img[x, y] = nireturn img
8灰度级图像
4灰度级图像
出现假轮廓
2灰度级图像(2值化 0~127置0 128~256置255)
数字图像处理:图像缩放和降低灰度级相关推荐
- 数字图像处理课设图像的锐化_数字图像处理图像锐化处理.ppt
数字图像处理图像锐化处理 4.7.2 灰度级到彩色转换 灰度级到彩色转换(例) 在HSI彩色空间的直方图均衡强度均衡处理没有改变图像的色调和饱和度值,但它的确影响了整体图像的彩色感观. 向量分量可以用 ...
- Matlab数字图像处理——图像的空间变换
Matlab空间变换函数 imtransform Matlab空间变换函数 imtransform 可以实现图像仿射变换(如 平移.旋转.剪切.缩放).投影变换, 该函数可与 maketform 配合 ...
- 《opencv 数字图像处理 图像基础》
<opencv 数字图像处理 图像基础> 矩阵 通道分离和合并 彩色图像转灰度图像 灰度图转二值化图像 图像运算 矩阵 定义一个显示图像的函数,对于灰度图,里面添加了vmin=0,vmax ...
- 数字图像处理图像反转的实现_使用8086微处理器反转16位数字
数字图像处理图像反转的实现 Problem statement: 问题陈述: Write an assembly language program in 8086 microprocessor to ...
- 数字图像处理图像反转的实现_反转8位数字| 8085微处理器
数字图像处理图像反转的实现 Problem statement: 问题陈述: To reverse 8 bits number using 8085 microprocessors. 使用8085微处 ...
- matlab 求其骨架,数字图像处理图像的骨架生成和提取(Matlab)三种方法
[实例简介] 数字图像处理图像的骨架生成和提取(Matlab),有三种方法,推荐给大家! [实例截图] [核心代码] Programe ├── Programe1 │ ├── 00.JPG │ ...
- 计算机图像进行滤波的函数,数字图像处理图像滤波.ppt
数字图像处理图像滤波 图像滤波 图像处理中所用到的图像往往含有噪声,需要用图像滤波的方法去除噪声. 内容框架 像素基础知识介绍 算术和逻辑运算 直方图 直方图均衡算法,用于图像锐化. 图像增强基本方法 ...
- 数字图像处理--图像的缩放变换
在日常工作中,我们经常需要对图像进行缩放(放大.缩小),旋转.平移等各种操作,这类操作统称为图像的几何变换.相对于前面提到的灰度变换,几何变换是改变了原图像像素点在新图像中的空间位置. 我们首先来看看 ...
- 数字图像处理——图像退化与复原
图像退化与复原 内容简介 1.图像退化与复原的原理 1.1 图像退化的数学模型 1.2 图像退化的原理 1.3 图像复原的原理 2. 图像去噪 2.1 噪声模型 2.2 噪声参数的估计 2.3 针对噪 ...
最新文章
- python操作目录_详解python中的文件与目录操作
- pycharm:格式化python代码
- 消费金融大潮来了,银行必须打出这套进攻+防守的组合拳
- 【.Net MF网络开发板研究-03】获取雅虎天气(HttpClient示例)
- html5 css3浏览器,五大主流浏览器CSS3和HTML5兼容性大比拼
- phoenix创建索引报错“ Mutable secondary indexes must have the hbase.regionserver.wal.codec property”
- 用C#连接到数据库实现学生学籍管理系统
- php ezsql,ezSQL PHP数据库操作类库
- UltraEdit 编辑器授权许可暴力破解
- 微信小程序生成海报及源代码
- css-自定义字体(LED)
- java 合并pdf_用iText分割和合并pdf文件
- python如何求积分_python 求定积分和不定积分示例
- 大小写字母表(大小写字母表)
- 据说,年薪百万的程序员,都是这么开悟的---笑一笑十年少
- 华师在线计算机考试登陆不上,华师在线首页登录网址
- python 如何调试uc浏览器_Python爬虫教程-10-UserAgent和常见浏览器UA值
- Java词向量比较字符串相似度_Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】...
- Java 的业务逻辑验证框架 fluent-validator
- 35岁,成就寥寥,为时已晚?(I am 35 and I haven't achieved much in life. Is it too late?)...
热门文章
- PPPPPPPPPPPP
- TIA博图边沿指令总结
- 未能加载文件或程序集“System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e0
- zabbix页面报错404和502解决
- 选购服务器要注意什么?
- http 请求上传文件大小限制
- 牛顿迭代法的C语言实现
- Bootstrap 思维导图
- 【笔记】软件测试02——移动测试基础02
- 如何去除PDF文档的加密