2018-12-17 17:02:05 qq_15971883 阅读数 3788
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19506 人正在学习 去看看 夏曹俊

在许多图像处理系统中,灰度归一化是必备的预处理过程。以手背静脉图像为例。由于同一个手背在不同时间、不同光照下采集到的静脉图像在灰度分布上可能存在着很大的差异,图像的灰度分布很不集中,这些将直接影响到后续的特征提取和识别,因此要对手背静脉图像进行灰度归一化。

这里介绍两种灰度归一化的方法:均值方差归一化、灰度变换归一化。

1. 均值方差归一化[1]

均值方差归一化是将不同时间、不同光照下采集到的图像转换到同一灰度均值和方差的标准图像。其公式为:  

                      

式中,I(i,j)、 M、 V分别表示归一化前图像的灰度值、均值、方差,N(i,j)、M0、V0分别表示归一化后图像的灰度值、均值、方差。

2. 灰度变换归一化[2]

灰度变换归一化是利用灰度拉伸的方法将原图像中的灰度分布扩展到具有整个灰度级的图像。例如,采集到的手背静脉图像是8位的灰度图像,应有256个灰度级,但往往由于采集时光照等因素的影响,图像的灰度级集中在一个或者几个灰度级区段,这时可以采用灰度拉伸的方法将图像扩展到256个灰度级。灰度变换归一化的公式为:

                          

式中,I(i,j)和N(i,j)分别表示原图像的灰度值、变换后图像的灰度值,min和max分别表示原图像的最小灰度值、最大灰度值。

 

参考文献:

[1] 林喜荣,庄波,苏晓生等. 人体手背静脉血管图像的特征提取及匹配[J]. 清华大学学报:自然科学版. 2003,43(2). 164-167

[2] 刘明奇,倪国强,陈小梅. 手背静脉图像预处理算法研究[J]. 光学技术,2007,33:255-256


以上述方法为依据,编写灰度归一化函数。

1. 均值方差归一化

function dstImage = grayNormalize1( srcImage, M0, V0 )
% 灰度归一化函数,将输入的图像转换为统一均值和方差的标准图像
% 输入参数:
%   srcImage -- 输入的图像
%   M0 -- 归一化后图像的均值
%   V0 -- 归一化后图像的方差
% 输出参数:
%   dstImage -- 输出的图像

% 编写时间:2018-12-6  编写人:gq

I = im2double(srcImage); 
[m, n] = size(I); 
J = zeros(m, n); 
M = mean(mean(I)); % 输入图像的均值
V = std2(I); % 输入图像的方差

for i = 1 : m
   for j = 1 : n
      if I(i,j) > M
          J(i,j) = M0 + sqrt( ( V0 * ( I(i,j)-M).^2 ) / V ); 
      else
          J(i,j) = M0 - sqrt( ( V0 * ( I(i,j)-M).^2 ) / V );
      end
   end
end

dstImage = uint8(J); 

2. 灰度变换归一化

function dstImage = grayNormalize2(srcImage)
% 灰度变换归一化,拉伸原图像的灰度级
% 输入参数:
%   srcImage -- 原灰度图像
% 输出参数:
%   dstImage -- 变换后的图像

% 编写时间:2018-12-17  编写人:gq

I = im2double(srcImage);  % 将原图像转换为浮点型数据

minValue = min(min(I));  % 获得原图像的最小灰度值
maxValue = max(max(I));  % 获得原图像的最大灰度值

[m, n] = size(I); 
J = zeros(m, n); 

for i = 1 : m
   for j = 1 : n
      J(i,j) = 255 * (I(i,j)-minValue) / (maxValue-minValue);  
   end
end

dstImage = uint8(J); 

调用上述两个灰度归一化函数。

close all; 
clear; 
clc; 

% read an image into the workspace
I = imread('vein.bmp'); 

% caculated by grayNormalize1
J1 = grayNormalize1(I, 100, 255);  % 设变换后图像的均值为100,方差为255

% caculated by grayNormalize2
J2 = grayNormalize2(I); 

figure;
subplot(131), imshow(I); 
subplot(132), imshow(J1); 
subplot(133), imshow(J2); 

实验结果如下图所示。

 

2017-03-11 20:04:57 discoverer100 阅读数 34980
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19506 人正在学习 去看看 夏曹俊

在许多图像处理系统中,对图像进行归一化都是必备的预处理过程。一般而言,对于灰度图像(或彩色通道的每个颜色分量)进行灰度归一化就是:使其像素的灰度值分布在0~255之间,避免图像对比度不足(图像像素亮度分布不平衡)从而对后续处理带来干扰。

一种常见的图像归一化原理1是y=(x-MinValue)/(MaxValue-MinValue)
其中x、y分别为归一化前、归一化后的值,MaxValue、MinValue分别为原始图像灰度的最大值和最小值。

源码示例(这里包含了三种方法:前两种是编程实现2,最后一种直接调用MATLAB函数来实现3,大家可以参考):

oriImage = imread('XXXX.jpg');
grayImage = rgb2gray(oriImage);
figure;
imshow(grayImage);

originalMinValue = double(min(min(grayImage)));
originalMaxValue = double(max(max(grayImage)));
originalRange = originalMaxValue - originalMinValue;

% Get a double image in the range 0 to +255
desiredMin = 0;
desiredMax = 255;
desiredRange = desiredMax - desiredMin;
dblImageS255 = desiredRange * (double(grayImage) - originalMinValue) / originalRange + desiredMin;

figure;
imshow(uint8(dblImageS255));

% Get a double image in the range 0 to +1
desiredMin = 0;
desiredMax = 1;
desiredRange = desiredMax - desiredMin;
dblImageS1 = desiredRange * (double(grayImage) - originalMinValue) / originalRange + desiredMin;

figure;
imshow(dblImageS1);

% Another way to normalazation, which only calls MATLAB function
img3 = mat2gray(oriImage);
figure;
imshow(img3);

上述源码已在MATLAB 2014和MATLAB 2016上通过测试。

原始图片:
这里写图片描述

运行后的效果:
这里写图片描述

注意:如果在自己的图片上希望看到直观的效果,请模仿示例预先将测试图片的对比度调低一些,让图像中各个像素点的灰度分布范围不足 0-255。

参考资料:
https://cn.mathworks.com/matlabcentral/newsreader/view_thread/297402
http://blog.csdn.net/zengjiqin/article/details/50032893
http://blog.csdn.net/fx677588/article/details/53301740#comments

2013-07-09 12:44:39 chenyu19880302 阅读数 9245
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19506 人正在学习 去看看 夏曹俊

       在对人脸表情进行识别时,人脸的归一化处理是至关重要的一环,它涉及到下一步处理的好坏。

人脸的归一化包括几何归一化和灰度归一化,几何归一化分两步:人脸校正和人脸裁剪。而灰度归

一化主要是增加图像的对比度,进行光照补偿。

1.几何归一化

几何归一化的目的主要是将表情子图像变换为统一的尺寸,有利于表情特征的提取。具体步骤如下:

(1)标定特征点,这里用[x,y] = ginput(3)函数来标定两眼和鼻子三个特征点。主要是用鼠标动手标

定,获取三个特征点的坐标值。

(2)根据左右两眼的坐标值旋转图像,以保证人脸方向的一致性。设两眼之间的距离为d,其中点为O。

(3)根据面部特征点和几何模型确定矩形特征区域,以O为基准,左右各剪切d,垂直方向各取0.5d和

1.5d的矩形区域进行裁剪。

(4)对表情子区域图像进行尺度变换为统一的尺寸,更有利于表情特征的提取。把截取的图像统一规格

为90*100的图像,实现图像的几何归一化。

面部几何模型如下图:

2.灰度归一化

        灰度归一化 主要是增加图像的亮度,使图像的细节更加清楚,以减弱光线和光照强度的影响。

这里用的是image=255*imadjust(C/255,[0.3;1],[0;1]); 用此函数进行光照补偿。 

具体代码如下:

C= imread('Image001.jpg');
figure(1),imshow(C);
C=double(C);
image=255*imadjust(C/255,[0.3;1],[0;1]);
figure(2),imshow(image/255);
title('Lighting compensation');%光照补偿

[x,y] = ginput(3);    %%1 left eye, 2 right eye, 3 top of nose
cos = (x(2)-x(1))/sqrt((x(2)-x(1))^2+(y(2)-y(1))^2);
sin = (y(2)-y(1))/sqrt((x(2)-x(1))^2+(y(2)-y(1))^2);
mid_x = round((x(1)+x(2))/2);
mid_y = round((y(2)+y(1))/2);
d = round(sqrt((x(2)-x(1))^2+(y(2)-y(1))^2));
rotation = atan(sin./cos)*180/pi;
img = imrotate(image,rotation,'bilinear','crop'); 
figure(3), imshow(img);%人脸校正

[h,w] = size(img);
leftpad = mid_x-d;
if leftpad<1
   leftpad = 1;
end
toppad =mid_y - round(0.5*d);
if toppad<1
   toppad = 1;
 end
 rightpad = mid_x + d;
 if rightpad>w
    rightpad = w;
 end
 bottompad = mid_y + round(1.5*d);
 if bottompad>h
    bottompad = h;
 end   
 I1 =[];
 I2 =[];
 I1(:,:) = img(toppad:bottompad,leftpad:rightpad);
 I2(:,:) = imresize(I1,[90 100]); 
 figure(4),imshow(I2,[]);%人脸裁剪


     



2019-12-05 18:05:14 simonyucsdy 阅读数 22
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19506 人正在学习 去看看 夏曹俊

cv::normalize(src, dst, 0, 255, NORMAL_MINMAX)

将灰度拉伸到0~255之间

cv::normalize(src, dst, 0, 1, NORMAL_MINMAX)

将灰度归一化到0~1之间

2019-07-29 17:24:21 nanhuaibeian 阅读数 1198
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19506 人正在学习 去看看 夏曹俊

归一化
就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。
首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。

归一化的原因

  1. matlab里图像数据有时候必须是浮点型才能处理,而图像数据本身是 0-255 的 uint8 型数据,所以需要归一化,转换到 0-1之间。
  2. 在许多图像处理系统中,对图像进行归一化都是必备的预处理过程。一般而言,对于灰度图像(或彩色通道的每个颜色分量)进行灰度归一化就是:使其像素的灰度值分布在0~255之间,避免图像对比度不足(图像像素亮度分布不平衡)从而对后续处理带来干扰。
  3. 例如一个double类数组包含区间[0,255]之外的值,则使用B = uint8(A)转换时,MATLAB会将所有小于0的值转换为0,所有大于255的值转换为255,而在0和255之间的值将全部舍去小数部分转换为整数。因此需要对其进行适当地缩放
  4. 防止跨度过大,把边缘像素抹掉

示例 1

>> g = [-0.5 0.5;0.75 1.5]
g =
   -0.5000    0.5000
    0.7500    1.5000
% 将矩阵 g 构成的图像转换为 uint8 型
>> g1 = im2uint8(g)
g1 =
  2×2 uint8 矩阵
     0   128
   191   255
% 将矩阵 g 构成的图像先归一化处理,然后转换为 uint8 型
>> g2 = im2uint8(mat2gray(g))
g2 =
  2×2 uint8 矩阵
     0   128
   159   255

由结果可以看出,不归一化处理,对图像的灰度(介于黑白之间的颜色)或多或少有影响。
示例 2
在这里插入图片描述

没有更多推荐了,返回首页