创建以YUVtoJPEG为名称的M文件,读取CIF格式的YUV文件mobile_cif_300f.yuv的前60帧,并逐一以jpg格式保存各视频帧至当前目录下,视频帧帧号命名相对应的jpg图片。保存的jpg图片满足以下条件:
第1-10帧,视频帧缩小1倍后,利用双线性内插法放大回原尺寸;
第11-20帧,对视频帧混入椒盐噪声,再作中值滤波;
第21-30帧,对视频帧混入高斯噪声,再作图像维纳滤波复原;
第31-40帧,对视频帧作直方图均衡化;
第41-50帧,对视频帧作Sobel边缘检测,将边缘点像素值增大为原值的1.2倍;
第51-60帧,将视频帧的DCT变换系数取值前30%置为0,并重建视频帧;
计算第1-60帧处理后视频帧与原始视频帧在Y通道上的PSNR值,并显示出PSNR值随帧号的变化曲线。
注:上述所有处理均在Y通道,UV通道不作处理。
%YUVtoJPEG.m
clc;clear;
%
[Y,U,V] = ReadMultiFrames('mobile_cif_300f.yuv','cif',[0,60]);
len = size(Y,3);
psnr = [];
for ii = 1:lenYc = Y(:,:,ii);Uc = U(:,:,ii);Vc = V(:,:,ii);if ii<=10Yd = fun1(Yc);elseif ii<=20Yd = fun2(Yc);elseif ii<=30Yd = fun3(Yc);elseif ii<=40Yd = fun4(Yc);elseif ii<=50Yd = fun5(Yc);elseYd = fun6(Yc);endtmp = PSNR(Yc,Yd);psnr = [psnr,tmp];im_rgb = yuv2rgb(Yd,Uc,Vc);imwrite(uint8(im_rgb),[num2str(ii),'.jpg']);
end
plot(psnr);
function Yd = fun1(Yc)w = fspecial('average',[5,5]);
Yc = imfilter(Yc,w);
Yc = Yc(1:2:end,1:2:end);Yd = imresize(Yc,2,'bilinear');end
function Yd = fun2(Yc)Yc = uint8(Yc);
J = imnoise(Yc,'salt & pepper',0.05);
B = ordfilt2(J,13,ones(5,5));
Yd = double(B);end
function Yd = fun3(Yc)Yc = mat2gray(Yc);
J = imnoise(Yc,'gaussian',0,0.05);
B = wiener2(J,[5 5]);
Yd = double(255*B);end
function Yd = fun4(Yc)Yc = uint8(Yc);
Yd = histeq(Yc);
Yd = double(Yd);end
function Yd = fun5(Yc)BW = edge(Yc,'sobel');
Yc(BW(:)) = Yc(BW(:))*1.2;
Yd = Yc;end
function Yd = fun6(Yc)d = dct2(Yc);
[tmp,idx] = sort(d(:),'descend');
idx1 = idx(1:round(length(idx)*0.3));
d(idx1) = 0;
Yd = idct2(d);end
function r = PSNR(x1,x2)x1 = double(x1);
x2 = double(x2);mes = x1-x2;r = 10 * log10(255^2 / mean(mes(:).^2));end
function im_rgb = yuv2rgb(Yd,Uc,Vc)Uc = imresize(Uc,2);
Vc = imresize(Vc,2);R = Yd + 1.4075*(Vc-128);
G = Yd - 0.3455*(Uc-128) - 0.7169*(Vc-128);
B = Yd + 1.7790*(Uc-128);im_rgb = cat(3,R,G,B);
im_rgb(im_rgb>255) = 255;
im_rgb(im_rgb<0) = 0;end
function [Y,U,V] = ReadMultiFrames(yuvfilename,format,init2last)
%该函数用于将yuv格式的视频连续多帧分别读入到三维数组Y,U,V之中
%yuv视频的采样格式为4:2:0
%输入参数:
%      yuvfilename  ---- 视频yuv文件路径名
%      format       ---- 视频格式(格式名or分辨率[rows,cols])
%      init2last    ----  读取的视频帧的范围[初始帧序号,终止帧序号]
%输出参数:
%         Y         ---- 亮度,三维数组,第三维为帧序号,前两维是单帧的行和列
%        U,V        ---- 色差,三维数组,第三维为帧序号,前两维是单帧的行和列
%调用示范:
%  [Y,U,V] = ReadMultiFrames('.\videoname.yuv','cif',[100,101]);
%  [Y,U,V] = ReadMultiFrames('.\videoname.yuv',[288,352],[100,101]);
close all;
if ischar(format)format = lower(format);switch formatcase 'sub_qcif'cols = 128; rows = 96;case 'qcif'cols = 176; rows = 144;case 'cif'cols = 352; rows = 288;case 'sif'cols = 352; rows = 240;case '4cif'cols = 704; rows = 576;otherwiseerror('no format!');end
elseif isequal(size(format),[1,2])||isequal(size(format),[2,1])cols = format(2);rows = format(1);
elseerror('第二参数输入有误!');
endpoint = fopen(yuvfilename,'r');
if point == -1error('打开文件失败!');
endorder_num = init2last(1);
frames_num = init2last(2) - order_num + 1;
k = 0;
Y = zeros(rows,cols,frames_num);
U = zeros(rows/2,cols/2,frames_num);
V = U;offset = order_num*(rows*cols + rows*cols/2);
status = fseek(point,offset,'bof');
pro = fread(point,1,'uchar');
if (isempty(pro)&&feof(point)) || status ~=0error('读取位置定位失败!');
end
fseek(point,-1,'cof');for ii = 1:frames_numk = k + 1;pro = fread(point,1,'uchar');if feof(point)&&isempty(pro)disp('读取帧数范围已超过yuv视频总帧数!');Y = Y(:,:,1:k-1);U = U(:,:,1:k-1);V = V(:,:,1:k-1);break;endfseek(point,-1,'cof');temp = fread(point,[cols,rows],'uchar');Y(:,:,ii) = temp';temp = fread(point,[cols/2,rows/2],'uchar');U(:,:,ii) = temp';temp = fread(point,[cols/2,rows/2],'uchar');V(:,:,ii) = temp';
endfclose(point);end

数字图像处理期末测试相关推荐

  1. matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21

    数字图像处理期末复习2018-12-21 愉快先生 0.204 · 字数 5547 · 阅读 1834 2018-12-22 19:35 (数字图像冈萨雷斯第二版教材) 一.基本原理 图像的读取.存储 ...

  2. 数字图像处理期末整理

    数字图像处理期末整理 1. 数字图像基础 1.1 采样和量化 1.2 彩色模型 2. 空域滤波 2.1 灰度变换 2.1.1 基本的灰度变换函数 2.2 直方图处理 2.2.1 直方图均衡化 2.2. ...

  3. 数字图像处理期末大作业-美图秀秀

    本项目是以matlab为主语言并设计GUI界面的一款简易美图秀秀,包含基础的图像处理和一些常见美颜算法 对于一些matlab较难实现的算法采用C++或python来实现 ⭐️ github地址:htt ...

  4. 数字图像处理期末大作业 完成总结

    考核内容 一.设计部分(70分) 第一部分:编写一个基于GUI的图像处理程序/软件,功能按钮和界面布局自己设定,遵循美观大方.方便操作的原则:(30分) 第二部分:项目设计内容:(40分) 1.绘制灰 ...

  5. 数字图像处理期末总结

    前言概述部分 数字媒体包含哪些类型,涉及哪些研究领域? 1)可视数字媒体包含图像.视频.图形和可视化数据等媒体类型,这些媒体类型之间具有很强的相关性,但又有明确的差异性: 2)可视数字媒体涉及计算机视 ...

  6. 山东大学软件学院2019数字图像处理期末试题(数媒)

    考砸了--都是软件学院的,软工和数媒的题咋就差距这么大呢.记录一下,明年说不定还用得上. 试题分8道选择题每道6分,4道简答题每道10分,最后一道计算题12分 . 一. 选择 数字图像定义 9×9英寸 ...

  7. 遥感数字图像处理期末总结二

    第二次总结复习参考题 一.试述遥感影像几何变形误差的主要来源和类型 遥感图像的几何误差可分为静态误差和动态误差两大类.静态误差是指成像过程中,传感器相对于地球表面呈静止状态时所具有的各种误差;动态误差 ...

  8. 【数字图像处理】2021期末复习考试重点大纲

    本文目录 数字图像处理期末复习 1.填空(每空2分,共20分) 1.均值滤波计算 2.中值滤波计算 3.水平方向一阶锐化计算 4.无方向一阶锐化计算 5.位图文件存储所需要的数据量计算 2.问答(每题 ...

  9. 数字图像处理大作业实验报告

        <数字图像处理> 期末大作业 班    级:数字媒体技术2020级1班 姓    名:快乐的小蓝 学    号:XXXXXXXXX XXXX大学信息学院 目录 一.任务描述 二.设 ...

最新文章

  1. 前端JS调用微信扫一扫二维码
  2. golang中的bufio
  3. lisp精要(2)-基础(1)
  4. BZOJ2209: [Jsoi2011]括号序列
  5. ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核
  6. Effective C# 原则34:创建大容量的Web API(译)
  7. github设置中文_【Github】100+ Chinese Word Vectors 上百种预训练中文词向量
  8. fastapi quickstart学习
  9. eureka自我保护时间_Eureka的自我保护机制
  10. 补:关于man关于SEE ALSO(参见)中代号与vim下常用命令
  11. 汉仪字体安装后PPT找不到_字体不知道去哪下载?我教您
  12. Teechart图表教程:Teechart的功能简介
  13. 铅蓄电池首批规范企业名单出炉 多家上市公司入围
  14. 1.Excel绘制斜线表头
  15. [IT最前沿--有点意思] 微博营销案例:杜蕾斯鞋套雨夜传奇
  16. 通用API接口签名算法(参考淘宝)
  17. 谷歌cloud_参加Google Cloud专业机器学习工程师考试的20天Beta
  18. Java使用Spire将网页保存为PDF并去除Evaluation Warning水印方案
  19. jquery和workerman实例和案例demo代码
  20. 键盘的某个键坏了,怎么用其它键代替?

热门文章

  1. 教师资格证科目一综合素质
  2. 计算机专业用苹果哪款笔记本,电脑太多,哪款最适合您?盘点9款最佳笔记本电脑,您中意谁呢?...
  3. 哈工大计算机网络第七章——无线网络与移动网络复习
  4. c语言作业的心得土灰,作业心得体会范文4篇
  5. 找实习、工作的一点浅见
  6. 行为型设计模式之中介者模式
  7. LR实战之Discuz开源论坛——登录脚本
  8. HNU-电子测试平台与工具-三人表决器
  9. 蚂蚁金服回应,支付宝年度账单“虚高”
  10. Vue 引入路径正确的,但有波浪线: differs from already included file name