实验要求

(1.a) 编写一个以2 的幂次方将给定图像的灰度级数从256 减少到2 的程序。图像的灰度级数以参数变量的形式传递到所编写的程序中。

(1.b) 使用图2.21(a) 以(1.a)中编写的程序生成图2.21 所示的各个结果。

(2.a) 编写一个基于像素复制方式进行图像缩放的程序,假设缩放因子为整数。忽略混叠效应。

(2.b) 用编写的程序将图2.19 (a)从1024 x 1024 缩小到 256 x 256。

(2.c) 用编写的程序将(2.b)中的结果图像放大到1024 x 1024. 并解释与原图产生差异的原因。

(3.a) 编写一个以双线性插值技术进行图像缩放的程序,程序的输入参数为结果图像的水平和垂直方向的像素数。忽略混叠效应。

(3.b) 用编写的程序将图2.19 (a)从1024 x 1024 缩小到 256 x 256。

(3.c) 用编写的程序将(3.b)中的结果图像放大到1024 x 1024. 并解释与原图产生差异的原因。


技术论述

1、 图像灰度级变化
  灰度图像是一种具有从黑到白256级灰度色阶或等级的单色图像。该图像中的每个像素用8位数据表示,因此像素点值介于黑白间的256种灰度中的一种。该图像只有灰度等级,而没有颜色的变化。
  灰度即色阶或灰阶,又称中间色调,是指亮度的明暗程度。图像灰度级指图像中的色度分量亮度的最大值与最小值之差的级别,级数越多,图像亮度范围就越丰富,图像质量越好,反之,级数越少时图像质量越差。当图像只有2个灰度色阶时,称之为二值图像。
  本实验中,将给定图像的灰度级数以2的幂次方从256减少到2,所采用量化方法为:

灰度级数=(原灰度级数 / 量化级数)* 量化级数

2、 像素复制方法
  图像缩放中,像素复制方法的原理是对原来输入图像的整行或是整列像素进行简单的复制与删除,达到改变图像大小的目的。该方法计算量小、运算速度快,但容易产生失真,不适合处理具有大量细节的图像。

3、双线性插值技术
  双线性插值又称双线性内插,当图像放大时,结果图像中新的像素值,是由原图像像素位置的临近点像素值通过加权平均计算得出的。
  当对相邻四个像素点采用双线性插值时,所得表面在邻域处是吻合的,但斜率不吻合,并且双线性灰度插值的平滑作用可能使得图像的细节产生退化,这种现象在进行图像放大时尤其明显。
  双线性插值的运算量比像素复制方法大,但是其处理结果更接近于原图像的细节。


实验结果






实验程序

% 主函数% 灰度级数降低
f0 = imread('Fig2.21(a).jpg');                           % CT投影图像
subplot(2,4,1);imshow(f0);title('Fig2.21(a)原图像');      % 显示原图像
for i = 1:7                 subplot(2,4,i+1);imshow(grayleveldec(f0,i));                          % for循环显示灰度级降低后的图像title(sprintf("%d级灰度图像", 2^(8-i)));
end% 像素复制
f = imread('Fig2.19(a).jpg');                            % 玫瑰图像
f_shrink = pixel_duplication(f,-4);                      % 图像缩小:像素复制
f_zoom = pixel_duplication(f_shrink ,4);                 % 图像放大:像素复制
figure;imshow(f);title('Fig2.19(a)原图像');
figure;imshow(f_shrink);title('像素复制缩小');
figure;imshow(f_zoom);title('像素复制放大');% 双线性插值
f1_shrink = bilinear(f,256,256);                        % 图像缩小:双线性插值
f1_zoom = bilinear(f1_shrink,1024,1024);                % 图像放大:双线性插值
figure;imshow(f1_shrink);title('双线性插值缩小');
figure;imshow(f1_zoom);title('双线性插值放大');
function imt = grayleveldec(ima,factor)
%功能: 将原图像的灰度级按照2的foctor次幂减少if factor < 0 factor = 0;
end
if factor > 8factor = 8
end
dfact = uint8(power(2, factor));
imt = (ima / dfact) * dfact;                           % 取整量化
return;
function img_duplication = pixel_duplication(img_input,factor)
% 像素复制方法[M,N] = size(img_input);
if factor == 0                                        % 图像不进行缩放img_duplication  = img_input;
elseif factor > 0                                     % 图像放大for i = 1 : M * factorfor j = 1 : N * factorimg_duplication(i,j) = img_input(ceil(i/factor),ceil(j/factor));% 像素坐标下标从1开始而非0,故需要向上取整即使用ceil(x)函数endend
else                                                  % 图像缩小for i = 1 : M / abs(factor)for j = 1 : N / abs(factor)img_duplication(i,j) = img_input(i*abs(factor),j*abs(factor));endend
endend
function img_bilinear=bilinear(img_input,x_pixel,y_pixel)
% 双线性插值[M,N]=size(img_input);                               % 图像的行数列数
img_input=double(img_input);                         % 转换为双精度类型
n = x_pixel/M;                                       % 缩放因子% 为解决边界溢出问题,扩大原图像的四边边缘
img_temp= zeros(M+2,N+2);
img_temp(2:M+1,1) = img_input(:,1);                  % 左边,长度M
img_temp(2:M+1,N+2) = img_input(:,N);                % 右边,长度M
img_temp(2:M+1,2:N+1) = img_input(:,:);              % 中间,图像复制
img_temp(1,:) = img_temp(2,:);                       % 上边,长度N+2
img_temp(M+2,:) = img_temp(M+1,:);                   % 下边,长度N+2M1 = round((M+2)*n);                                 % 计算加边后缩放的图像的行数
N1 = round((N+2)*n);                                 % 计算加边后缩放的图像的列数
img_res = zeros(M1,N1);     for i=round(n+1):round(x_pixel+n)  for j=round(n+1):round(y_pixel+n)  x=i/n;                                       % 缩放后的图像坐标在原图像处的位置  y=j/n;  u=x-floor(x);                     v=y-floor(y);  img_res(i,j)=u*v*img_temp(x-u,y-v)+(1-u)*v*img_temp(x-u,y-v+1)+...u*(1-v)*img_temp(x-u+1,y-v)+(1-v)*(1-u)*img_temp(x-u+1,y-v+1);  end
end
img_bilinear=img_res(n+1:x_pixel+n,n+1:y_pixel+n);
img_bilinear=uint8(img_bilinear);
end 

【图像处理】图像灰度级减少, 图像缩放(Reducing the Number of Gray Levels, Zooming and Shrinking)相关推荐

  1. Reducing the Number of Gray Levels, Zooming and Shrinking Images

    摘    要:本实验分为三部分:编写一个以2的幂次方将一幅图像的灰度级数从256减少到2:编写一个基于像素复制法的图像缩放程序,要求缩放因子为整数:编写一个基于双线性插值法的图像缩放程序,要求输入参数 ...

  2. 数字图像处理实验(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 ...

  3. 图像的灰度级数越多越好_数字图像处理:Reducing Gray Levels, Zooming and Shrinking

    摘 要:本实验通过编写三个MATLAB的程序来实现图像的放大与缩小和减小图像的灰度级数.三个程序包括:编写一个以2的幂次方将给定图像的灰度级数从256减少到2的程序,并用该程序实现由图 2.21(a) ...

  4. Matlab实现图像插值和降低图像灰度级

    ###图像在旋转或者缩放操作时候会需要插值操作,插值操作就是在像素间插入未知的像素值. ###常见的插值算法有最近邻插值算法,双线性插值算法,三次卷积等 ###最近邻插值算法 这是最简单的一种插值算法 ...

  5. 数字图像处理(9): 图像缩放、图像旋转、图像翻转 和 图像平移

    目录 1 图像缩放- resize() 2 图像旋转- getRotationMatrix2D(), warpAffine() 3 图像翻转- flip() 4 图像平移- warpAffine() ...

  6. C语言数字图像处理---1.5图像基本变换之平移缩放旋转

    本篇作为新年到来前的最后一篇,提前祝大家新年快乐! 图像几何变换又叫做图像基本变换,主要包括图像平移.图像缩放和图像旋转几个部分,当然还有图像镜像等简单的内容.图像基本变换是图像处理的基本内容,是学习 ...

  7. python图像处理第七课--图像缩放、翻转、旋转、平移--小白的成长历程

    #目的为记录在自己运行时存在的问题及解决方法,本文基于CSDN社区的Eastmount大佬的课程,通过学习,其中也增加了自己的考量和问题的解决. 图像缩放 图像缩放由 resize() 函数实现,如下 ...

  8. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. [Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

最新文章

  1. Ubuntu换回Gnome界面
  2. 011_Cascader级联选择器
  3. 后台原理_从浏览器如何进入路由器后台【详细介绍】
  4. 问题 | 执行pip install --upgrade --ignore-installed tensorflow出现Cannot open\Scripts\pip-script.py
  5. 选择排序-冒泡排序-归并排序-快速排序-插入排序
  6. vue 点击渲染ajax,vue中在页面加载时发送ajax请求获取数据渲染不到页面上
  7. 神经网络告诉我,谁是世界上最「美」的人?
  8. Python编辑工具的全新版本,PyCharm 2020.1 稳定版发布
  9. 离不开的微服务架构,脱不开的RPC细节(值得收藏)!!!
  10. 在 Win vs2017 下编译 zint
  11. linux主机与路由器建立隧道的方法
  12. border-radius导致overflow:auto 或者 overflow:hidden失效,溢出问题解决方法
  13. 转自瑞星:“永恒之蓝”WannaCry勒索病毒分析报告
  14. 思科九年(转载自Internet)
  15. 华为5G手机全球第一,人均年薪69万!
  16. 寻找反素数python
  17. 在腾讯轻量云上搭建 CS:GO 服务器
  18. 迅雷离线下载与高速通道运作原理详解
  19. 什么是远程访问?怎样在任何地方连接到您的电脑
  20. 后台打log(便于查看问题和调试)方法

热门文章

  1. 5-2 面向可维护性的设计模式
  2. AcWing 101. 最高的牛
  3. 合数分解1(C语言)
  4. hihocoder第233周
  5. 三层交换机对链路层数据帧的处理
  6. AttributeError: module ‘cv2.cv2‘ has no attribute ‘bgsegm‘
  7. IDEA+SpringBoot+Dubbo在webapp下创建前端页面
  8. 从生产线到生产岛:理解敏捷开发中的设计与测试活动
  9. Earth Wind and Fire CodeForces - 1148E (构造)
  10. 深入理解定时器系列第二篇——被誉为神器的requestAnimationFrame