2019-01-06 00:01:25 LVJINYANJY 阅读数 1455
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    48 人正在学习 去看看 穆辉宇
创建以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:len
    Yc = Y(:,:,ii);
    Uc = U(:,:,ii);
    Vc = V(:,:,ii);
    if ii<=10
        Yd = fun1(Yc);
    elseif ii<=20
        Yd = fun2(Yc);
    elseif ii<=30
        Yd = fun3(Yc);
    elseif ii<=40
        Yd = fun4(Yc);
    elseif ii<=50
        Yd = fun5(Yc);
    else
        Yd = fun6(Yc);
    end
    tmp = 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 format
        case '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;
        otherwise
            error('no format!');
    end
elseif isequal(size(format),[1,2])||isequal(size(format),[2,1])
    cols = format(2);rows = format(1);
else
    error('第二参数输入有误!');
end


point = fopen(yuvfilename,'r');
if point == -1
    error('打开文件失败!');
end

order_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 ~=0
    error('读取位置定位失败!');
end
fseek(point,-1,'cof');

for ii = 1:frames_num
    k = 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;
    end
    fseek(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';
end

fclose(point);

end

 

2019-11-07 13:56:06 xiao_z_ 阅读数 16
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    48 人正在学习 去看看 穆辉宇

数字图像处理的滤波器,基于空域的处理。

代码实现如下,有问题请留言,如果有帮助的话,评论支持一下。

function zy=filter_zy(image,option,num)
%image是输入的图片,option是使用哪种滤波器的选项,num指滤波器模板的大小。
image=im2double(image);
[r,c]=size(image);
jieguo=zeros(r,c);
n=floor(num/2);
a=padarray(image,[n,n],'symmetric');

[M,N]=size(a);
    for i=1+n:M-n
        for k=1+n:N-n
            b=a(i-n:i+n,k-n:k+n);
            b=reshape(b,1,numel(b));
            jieguo(i-n,k-n)=median(b,2);
        end
    end

if option==0%最小值滤波
    for i=1+n:M-n
        for k=1+n:N-n
            b=a(i-n:i+n,k-n:k+n);
            %b=reshape(b,1,numel(b));
            jieguo(i-n,k-n)=min(min(b));
        end
    end
end
if option==9%最大值滤波
    for i=1+n:M-n
        for k=1+n:N-n
            b=a(i-n:i+n,k-n:k+n);
            %b=reshape(b,1,numel(b));
            jieguo(i-n,k-n)=max(max(b));
        end
    end
end
zy=double(jieguo);



代码测试对不同噪声的效果:

ii=imread('cameraman.tif');
%ii = imnoise(ii, 'gaussian');
ii= imnoise(ii,'salt & pepper',0.01);
subplot(2,4,1);imshow(ii),title('添加椒盐噪声后');
%a=fspecial('average',15);
 %Y=filter2(a,ii)/255;  
 %用生成的滤波器进行滤波,并归一化
 Y=ordfilt2(ii,5,ones(3,3));
 yy=filter_zy(ii,5,3);
 yyMin=filter_zy(ii,0,3);
 yyMax=filter_zy(ii,9,3);
 
 Ymin=ordfilt2(ii,1,ones(3,3));
Ymax=ordfilt2(ii,9,ones(3,3));
subplot(2,4,2);imshow(Y),title('系统的的中值滤波:'); 
subplot(2,4,3);imshow(Ymin),title('系统的的最小值滤波:');
subplot(2,4,4);imshow(Ymax),title('系统的的最大值滤波:');%显示滤波后的图象
subplot(2,4,6);imshow(yy),title('自编的中值滤波:');
subplot(2,4,7);imshow(yyMin),title('自编的最小值滤波:');
subplot(2,4,8);imshow(yyMax),title('自编的最大值滤波:');

如果有帮助的话,还请评论一下,鼓励一下作者0.0 

 

 

2019-07-11 16:41:47 qasxc78563 阅读数 31
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    48 人正在学习 去看看 穆辉宇

先利用画图软件将图片裁剪到合适的大小

一、用MATLAB进行图像处理

1.图像处理
经过图像处理,将图像灰度化,对图像添加噪声或者线性变换增加图像数量。

clear;clc;close all;
Files=dir('F:\train\train\train5600\1852\pos\*.jpg');%读取图像路径
N=length(Files);
Names={};
for k=1:N
        Names{k}=Files(k).name;
        B = imread(['F:\train\train\train5600\1852\pos\' Names{k}]);%读取图像 
%        n = unidrnd(180);%n个整数中以相同的概率抽样的离散均匀分布的整数随机数
%        PSF = fspecial('motion',4,n);	%运动模糊函数,运动位移是15像素,角度是n
%        B=imfilter(B,PSF,'conv','circular');%对图像运动模糊处理
%        B = imnoise(B, 'salt & pepper', 0.1);%椒盐噪声
%        B = imnoise(B, 'speckle', 0.01);%斑点噪声
%         B = imnoise(B, 'gaussian', 0.01);%高斯噪声
         B = rgb2gray(B);%灰度处理
%         B = imresize(B,[20,20]);%将图像缩放为20*20的大小
%        B1 = imadjust(B,[0.3,1],[0.3,1]);%图像线性变换
%         B2 = imadjust(B,[0,1],[0,0.7]);
%         B3 = imadjust(B,[0,1],[0.3,1]);
%         B4 = imadjust(B,[0,1],[0.2,0.8]);
%         B5 = imadjust(B,[0,0.7],[0,1]);
%         B6 = imadjust(B,[0.3,1],[0,1]);
%         B7 = imadjust(B,[0.3,0.7],[0,1]);
%         B8 = imadjust(B,[0,0.7],[0,0.7]);
%         B9 = imadjust(B,[0.2,0.8],[0.2,0.8]);
        path='F:\train\piture\尺寸30\20变48_64\'; %图像处理后的保存路径
        file=Files(k).name; 
        pathfile=fullfile(path,file); 
        imwrite(B,pathfile,'jpg');%保存图像
end

2.图像重命名
从各处得到的图像名称比较混乱无序,手动重命名费时费力,注意,图像超过5000张matlab处理速度将会大大降低。

clc;clear;
dir1='F:\train\train\train5600\17364\2009-2010灰度6220';%图像处理前的路径
dir2='F:\train\train\train5600\17364\2009-2010灰度6220\';%图像处理后的路径
file_dat=dir([dir1 '\*.jpg']);
num_file=length(file_dat);

for i=1:num_file
    file_name=file_dat(i,1).name;
    filename1=strcat(dir2,file_name);
%    disp(file_name);
    temp_str = int2str(i);
    temp_length = length(temp_str);
    k=4-temp_length;
    a=char('0');
    temp_str=repmat(a,1,k);

    new_file=num2str(temp_str);
%    disp(new_file);
    c=int2str(i);
    b=strcat(new_file,c);
%    disp(b);
    d=strcat(b,'.jpg');
%    disp(d);
    d1=strcat('02019_01',d);
%    disp(d1);
    e=strcat(dir2,d1);
    disp(e);
%    disp(filename1);
movefile(filename1,e);
end

二、训练

1.训练的文件夹中应该有以下文件(pos.txt,neg.txt,pos.vec是之后生成的文件,opencv的两个文件在F:\opencv-3.4.6\opencv-3.4.6-vc14_vc15\opencv\build\x64\vc15\bin路径可以找到,其他三个是cmd执行命令文件)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.在pos和neg文件夹中双击get.route.bat文件,生成对应的.txt文件。打开txt文件,点击编辑,替换。将neg替换为neg\neg,pos.txt文件还需要将jpg替换为jpg 1 0 0 40 40
在这里插入图片描述
3.将处理好的.txt文件移出来,双击create_positive_samples.bat文件,产生pos.vec文件。
在这里插入图片描述
4.双击traincascade.bat开始训练
在这里插入图片描述
5.生成完成后在xml文件夹中可以看到cascade.xml文件。在http://www.openioe.net/xml2cascade.html网站上OpenCV XML 转 CASCADE。

三、测试

在python中测试需要有python-opencv模块
1.python加载图像测试

# -*- coding: utf-8 -*-
import cv2

def detect(filename):
    #face_cascade = cv2.CascadeClassifier(
    #        r'C:\Users\lenovo\AppData\Local\Programs\Python\Python37\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    
    face_cascade = cv2.CascadeClassifier(
            r'F:\train\train_over_xml\out_17364\0.9995\cascade_17364_9_0.9995.xml')    
    img = cv2.imread(filename)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    faces = face_cascade.detectMultiScale(gray,1.3,5)
    
    for (x,y,w,h) in faces:
        img = cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0),2)
    
    cv2.namedWindow('Person Detected!')
    cv2.imshow('Person Detected!',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    #detect(r'C:\Users\lenovo\Desktop\piture\6.jpg')
    detect(r'F:\train\test\17.jpg')

2.python加载视频测试

import cv2
def detect():
    # 加载Haar级联数据文件,用于检测人面
    face_cascade = cv2.CascadeClassifier('F:/train/train_over_xml/out_6804/0.9995/cascade_6804_12_0.9995.xml')
    #eye_cascade = cv2.CascadeClassifier('cascades/haarcascade_eye.xml')
    camera = cv2.VideoCapture('F:/train/0.5.mp4')
    while True:
        ret, frame = camera.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 人面识别。detectMultiScale参数说明:
        # gray: 进行检测的图像, 这里是转换后的。
        # scaleFactor: 官网文档说是每次图片缩小的比例, 其实可以这么理解, 距离相机不同的距离, 物体大小是不一样的,
        # 在物体大小不一致的情况下识别一个东西是不方便的, 这就需要进行多次的缩放, 这就是这个参数的作用。
        # minNeighbors: 可以理解为每次检测时, 对检测点(Scale)周边多少有效点同时检测, 因为可能选取的检测点大小不足而导致遗漏。
        # minSize: 检测点的最小值, 或者说就是检测点的最终值。
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(5,5))
        # 画出面部位置
        for (x, y, w, h) in faces:
            img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
            # 画出眼部位置
            #eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(5, 5))
            #for (ex, ey, ew, eh) in eyes:
            #    cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
            # 显示图像
            cv2.imshow('pic', frame)
        # 停止程序
        if cv2.waitKey(120) & 0xff == ord('q'):
            break
    camera.release()
    cv2.destroyAllWindows()

detect()

完整羽毛球训练例子工程文件请到https://download.csdn.net/download/qasxc78563/11329583下载

2009-12-29 17:02:00 wxzking 阅读数 28375
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    48 人正在学习 去看看 穆辉宇

Jpeg codec的测试中,需要测试worst case,所以要人为的去造一些加入噪声的图片。在此使用Matlab来进行加噪处理。

 

以下是根据网络资料,做了简单的整理,以备遗忘。

 

Matlab中为图片加噪声的语句是

(1)J = imnoise(I,type);

(2)J = imnoise(I,type,parameters);

其中I为原图象的灰度矩阵,J为加噪声后图象的灰度矩阵;

一般情况下用(1)中表示即可,(2)中表示是允许修改参数,

(1)中使用缺省参数;

至于type可有五种,分别为'gaussian'(高斯白噪声),'localvar'

(与图象灰度值有关的零均值高斯白噪声),'poisson'(泊松噪声),

'salt & pepper'(椒盐噪声)'speckle'(斑点噪声);

具体(2)中参数值的设定可根据个人需要;

其余情况以及若还有不懂请参考Matlab帮助文件。

 

我使用'salt & pepper'(椒盐噪声),并将其参数设置为0.6。其例子如下:

L = imread(‘image_ori.jpg’);

J = imnoise(L, ‘salt & pepper’, 0.6);

imshow(J); //立即弹出窗口,显示加了噪声后的图片

imwrite(J, ‘image_noise.jpg’, ‘jpg’, ‘Quality’, 100); //100%的质量存储加了噪声的图片,Quality的默认值为75.

 

以上程序就表示把原图像加入椒盐噪声,但注意要把图像和以上程序的M文件放在同一个子目录下。

2018-11-24 09:37:27 qutadi 阅读数 579
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    48 人正在学习 去看看 穆辉宇

源码下载简介

VC++基于神经网络的数字图片识别技术,并可对图片进行灰度处理、二值化、递推锐化、去离噪声、字符分隔等处理功能,调试时请将在Debug目录中生成的EXE文件拷贝至Release目录里运行,因为那里有测试图片。

源码下载地址:点击下载

备用下载地址:点击下载

车牌图像识别

阅读数 19803

ISP图像质量调节

阅读数 231

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