Reducing the Number of Gray Levels, Zooming and Shrinking Images
摘 要:本实验分为三部分:编写一个以2的幂次方将一幅图像的灰度级数从256减少到2;编写一个基于像素复制法的图像缩放程序,要求缩放因子为整数;编写一个基于双线性插值法的图像缩放程序,要求输入参数为输出图像的水平和垂直方向的像素数。并使用这三个函数对给定图像进行缩小再放大操作,对比输出图像和原图的差异。该实验是在MATLAB 2014a平台上实现。
(1)实验过程
分析:由实验要求知程序要实现三个功能1.灰度级减少2.基于像素复制的图像放缩3.基于双线性插值的图像放缩
1.灰度级减少
图像的灰度就是所谓的色阶或灰阶,是指亮度的明暗程度。也称中间色调主要用于传送图片,分别有16级、32级、64级三种方式,它采用矩阵处理方式将文件的像素处理成16、32、64级层次,使传送的图片更清晰。LED显示屏的灰度等级越高,颜色越丰富,色彩越艳丽;反之,显示颜色单一,变化简单。
本实验的图像素材是一种具有从黑到白256级灰度色阶的单色图像。该图像中的每个像素用8位无符号数据表示,因此像素点值介于黑白间的256种灰度中的一种。该图像只有灰度等级,而没有颜色的变化。
为了实现图像灰度级数的变化,本实验以2的幂次方将256级的灰度色阶进行量化。当图像的采样点数一定时,采用不同量化灰度级数的图像质量不一样。灰度级数越多,图像质量越好;反之图像质量越差。灰度级数小的极端情况就是二值图像。
程序中其中imt =uint8(fix(ima / 2^factor) * 2^factor)中fix(ima /2^factor)的计算结果为整数,略去了小数点后,再乘以2^factor则达到了量化的作用,即不是2^factor整数倍的灰度值都被归为2^factor的整数倍。为了防止数据溢出,将factor设定在0到8之间。
2.基于像素复制的图像放缩
像素复制法只是简单的把原图像最近邻的灰度赋给每个新的位置,或者在缩小中简单地去除某一位置的像素信息,在放大时会产生一些“空像素点”等待赋值,利用取整操作将像素复制到临近的像素点中
3.基于双线性插值的图像放缩
和像素复制法类似,“空像素点”的赋值使用双线性插值法
第一种情况:
a.点(i-b, j-a)与点(i-b,j+rate-a)插值得到点(1-b, j)处的灰度值;
b.点(i+rate-b, j-a)与点(i+rate-b, j+rate-a)插值得到点(i+rate-b,j)处的灰度值;
c.使用前面得到的结果,即点(i-b, j)与点(i+rate-b,j)进行插值得到点(i,j)处的灰度值。
第二种情况:
a.点(i-b, j-a)与点(i+rate-b,j-a)插值得到点(i, j-a)处的灰度值;
b.点(i-b, j+rate-a)与点(i+rate-b, j+rate-a)插值得到点(i,j+rate-a)处的灰度值;
c.使用前面得到的结果,即点(i, j-a)与点(i,j+rate-a)进行插值得到点(i,j)处的灰度值。
(2)实验结果与讨论
图像经过缩小后再放大细节出现了明显的马赛克化,是由于缩小过程中图像的细节会丢失,再次放大时这些细节是由临近的像素点简单的复制过来,因此细节还原度较差,所以图像会产生明显的失真。
图像经过imresize函数缩小后,部分细节也会丢失,再放大时细节无法完全真实的还原,所以图片出现了模糊,但是相较于基于像素复制的放大方式,基于双线性插值的放大方式图像细节的还原度较高,基于双线性插值的放大方式对丢失的细节像素点进行线性插值更叫符合客观图像灰度变化连续的事实,因此人眼看起来比基于像素复制的放大要清晰一些。
附录程序代码:
function imt = grayleveldec(ima,factor)
%功能: 将原图像的灰度级按照2的foctor次幂减少
% ima 输入的 8 bits灰度图像矩阵
% factor 灰度级减小因子if factor < 0 factor = 0;endif factor > 8factor = 8;endima=double(ima); imt = uint8(fix(ima / 2^factor) * 2^factor); return;function mainfunction()
%功能: 灰度级减少试验wH=2; wL=4;ima=imread('fig2.21(a).jpg');subplot(wH,wL,1) imshow(ima);title('原图像');imt = grayleveldec(ima,1);subplot(wH,wL,2) imshow(imt);title('128级灰度图像');imt = grayleveldec(ima,2);subplot(wH,wL,3) imshow(imt);title('64级灰度图像');imt = grayleveldec(ima,3);subplot(wH,wL,4) imshow(imt);title('32级灰度图像');imt = grayleveldec(ima,4);subplot(wH,wL,5) imshow(imt);title('16级灰度图像');imt = grayleveldec(ima,5);subplot(wH,wL,6) imshow(imt);title('8级灰度图像');imt = grayleveldec(ima,6);subplot(wH,wL,7) imshow(imt);title('4级灰度图像');imt = grayleveldec(ima,7);subplot(wH,wL,8) imshow(imt);title('2级灰度图像');
% 基于像素复制法的图像缩放程序----------------------
function imt=change_pixels(ima,factor)
% 输入参数为一整数缩放因子
% 当缩放因子为负整数时代表缩小,正整数时代表放大
[xs,ys] = size(ima);
if factor<0 %缩放因子小于0时,判断为缩小图像fa=abs(factor); %取绝对值for i=1:(xs/fa)for j=1:(ys/fa)imt(i,j) = ima(i*fa,j*fa);endend
else if factor>0 %缩放因子大于0时,判断为放大图像for i=1:(xs*factor)for j=1:(ys*factor)imt(i,j) = ima(ceil(i/factor),ceil(j/factor)); %上取整,即加入正小数至最近整数endendelse imt = ima;end
end
return;
%双线性插值图像缩放-----------------------------
function img=Bilinear_Interpolation(a,sizex,sizey)
[m,n]=size(a);
ratexx=sizex/m; %计算缩放比率
ratex=ratexx-1;
rateyy=sizey/n;
ratey=rateyy-1;
img=zeros(m+ratex*(m-1),n+ratey*(n-1));
for i=1:m for j=1:n img(i+ratex*(i-1),j+ratey*(j-1))=a(i,j); end;
end;
img=double(img);
for i=1:m+ratex*(m-1) %双线性插值for j=1:n+ratey*(n-1) a=mod(j-1,ratex+1); b=mod(i-1,ratey+1); if a~=0 && b==0 img(i,j)=round((a*img(i,j+(rateyy-a))+(rateyy-a)*img(i,j-a))/rateyy); end; if a==0 && b~=0 img(i,j)=round((b*img(i+(ratexx-b),j)+(ratexx-b)*img(i-b,j))/ratexx); end; if a~=0 && b~=0 img(i,j)=round((b*(a*img(i-b,j+(rateyy-a))+(rateyy-a)*img(i-b,j-a))/rateyy+(ratexx-b)*(a*img(i+(ratexx-b),j+(rateyy-a))+(rateyy-a)*img(i+(ratexx-b),j-a))/ratexx)/ratexx); end; end;
end;
img=uint8(img);
%利用双线性插值函数缩放Fig2.14(a).jpg比较与原图的效果----
img = imread('Fig2.19(a).jpg');figure(1)imshow(img)title('原图像');
% img1=change_pixels(img,-4);img1 = imresize(img, [256, 256]);figure(2)imshow(img1)title('缩小图')
% img2=change_pixels(img1,4);img2 = Bilinear_Interpolation(img1,1024,1024);figure(3)imshow(img2)title('双线性插值放大图')
Reducing the Number of Gray Levels, Zooming and Shrinking Images相关推荐
- 【图像处理】图像灰度级减少, 图像缩放(Reducing the Number of Gray Levels, Zooming and Shrinking)
实验要求 (1.a) 编写一个以2 的幂次方将给定图像的灰度级数从256 减少到2 的程序.图像的灰度级数以参数变量的形式传递到所编写的程序中. (1.b) 使用图2.21(a) 以(1.a)中编写的 ...
- 数字图像处理实验(2):PROJECT 02-02, Reducing the Number of Gray Levels in an Image
实验要求: Reducing the Number of Gray Levels in an Image Objective To understand how the number of gray ...
- 图像的灰度级数越多越好_数字图像处理:Reducing Gray Levels, Zooming and Shrinking
摘 要:本实验通过编写三个MATLAB的程序来实现图像的放大与缩小和减小图像的灰度级数.三个程序包括:编写一个以2的幂次方将给定图像的灰度级数从256减少到2的程序,并用该程序实现由图 2.21(a) ...
- 数字图像处理实验(4):PROJECT 02-04 [Multiple Uses],Zooming and Shrinking Images by Bilinear Interpolation
实验要求: Zooming and Shrinking Images by Bilinear Interpolation Objective To manipulate another techniq ...
- 数字图像处理实验(3):PROJECT 02-03, Zooming and Shrinking Images by Pixel Replication
实验要求: Zooming and Shrinking Images by Pixel Replication Objective To manipulate a technique of zoomi ...
- 数字图像处理实验(总计23个)汇总
以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...
- 《Imaging Systems For Medical Diagnostics》——11. Image Displays
<Imaging System 医学影像>@EnzoReventon <Imaging Systems For Medical Diagnostics>--11. Image ...
- halcon画出灰度直方图_halcon读取一张照片,并转化为灰度图像
dev_close_window () read_image (Image, 'E:/图片/123.jpg') get_image_size (Image, Width, Height) dev_op ...
- MATLAB 在图像处理和机器视觉的应用举例01 - 官网培训视频笔记(下)分类/灰度共生矩阵/纹理分类学习
前言: 本节继续讨论Matlab的机器视觉工具集举例,这次为分类的综合实现:该例子,用到了图像处理,统计,并行计算等方法. 1 分类的难度: [计算机视觉里面,分类的精髓在选取适当的数据集和算法,这一 ...
最新文章
- oracle数据库备份方法主要有哪几种,Oracle数据库备份方法有哪三种?
- 8086汇编语言指令总结
- python类中成员的的调用
- iOS开发——你真的会用SDWebImage?
- 针对移动互联网应用的网络建设和优化
- 伴鱼:借助 Flink 完成机器学习特征系统的升级
- 7-64 计算平均成绩 (15 分)
- VS2010在C#头文件添加文件注释的方法
- NLTK简单入门和数据清洗
- 替罪羊树+3369 【模板】普通平衡树
- deepstream-app源码没有公开,预计3.0可能公开
- PLSQL Developer破解注册码
- 如何查看opencv版本
- CSS盒子模型、Boder基础
- 博客整理——事后诸葛亮
- Java基础知识清单
- 工业控制计算机固态硬盘,工业级SSD接口全解析,懂了你才会选对工业级SSD
- 从MWC 2016看手机发展
- 一次新公司注册与小程序上线的历程
- 龙与地下城用户名_多用户地下城如何教我编程
热门文章
- win32 005 实模式
- 【图片按钮】在微信小程序中实现图片按钮
- Java--定位问题工具
- 透过散射介质的成像matlab,Advanced Photonics|深度神经网络实现透过厚散射介质成像...
- 微信公众号采集方案(基于Windows逆向)
- 多核cpu是并发还是并行_多核CPU及其带来的并发更改
- 前端如何判断用户是否打开了控制台
- C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
- 谷歌 汽车 android auto link,谷歌将推出Auto Link智能车载系统
- 资讯的服务器维护指什么,资讯