栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

卷积滤波器如何提取图像特征_图像处理卷积核?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

卷积滤波器如何提取图像特征_图像处理卷积核?

目录

前言卷积的各种滤波器表现python源码

前言

图像深度学习必定要用到卷积,从卷积的名称和原理来看起来一时给人感觉非常的难以“理解”,其实图像做卷积运算就是对各通道的像素值进行线性运算(乘加运算),每个像素等于对周围像素乘以卷积权重并相加后的值,本篇写了一个工具,将主要的一些卷积核都写了出来,对图像进行运算,方便直观的对图像卷积运算进行效果观察,可以对3*3的卷积运算进行随意玩耍,从而加深对图像卷积的理解。

卷积的各种滤波器表现

经过卷积计算可以获取各方向的边缘信息:



通过卷积也可以对图像模糊:


对图像进行锐化:

python源码

提供源码,网友们可以拿去随意玩耍:

# -*- coding: utf-8 -*-
"""
Created on Wed Aug  4 17:24:38 2021
@author: JAMES FEI 
Copyright (C) 2022 FEI PANFENG, All rights reserved.
THIS SOFTEWARE, INCLUDING documentATION,IS PROTECTED BY COPYRIGHT ConTROLLED 
BY FEI PANFENG ALL RIGHTS ARE RESERVED.

"""

import cv2
import numpy as np
import PySimpleGUI as sg
def is_number(s):
    """
    判断是否是数字
    """
    try:
        float(s)
        return True
    except ValueError:
        pass
 
    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass
 
    return False        
Covlist={
        "高斯滤波器":np.array((
        [0.0625, 0.125, 0.0625],
        [0.125, 0.25, 0.125],
        [0.0625, 0.125, 0.0625]), dtype="float32"),
        
        
        "低通滤波器1":np.array((
                [1, 2, 1],
                [2, 4, 2],
                [1, 2, 1]), dtype="float32")*(1/16),
        "低通滤波器2":np.array((
                [1, 1, 1],
                [1, 1, 1],
                [1, 1, 1]), dtype="float32")*(1/9),
        "低通滤波器3":np.array((
                [1, 1, 1],
                [1, 2, 1],
                [1, 1, 1]), dtype="float32")*(1/10),
                
        "高通滤波器1":np.array((
                [0, -1, 0],
                [-1, 5, -1],
                [0, -1, 0]), dtype="float32"),    
        "高通滤波器2":np.array((
                [-1, -1, -1],
                [-1, 9, -1],
                [-1, -1, -1]), dtype="float32"),               
        "高通滤波器3":np.array((
                [1, -2, 1],
                [-2, 5, -2],
                [1, -2, 1]), dtype="float32"),   
        "平移差分边缘滤波器1":np.array((
                [0, 0, 0],
                [-1, 1, 0],
                [0, 0, 0]), dtype="float32"),     
        "平移差分边缘滤波器2":np.array((
                [0, -1, 0],
                [0, 1, 0],
                [0, 0, 0]), dtype="float32"),  
        "平移差分边缘滤波器3":np.array((
                [-1, 0, 0],
                [0, 1, 0],
                [0, 0, 0]), dtype="float32"),         
        "平移差分边缘滤波器4":np.array((
                [0, 0, -1],
                [0, 1, 0],
                [0, 0, 0]), dtype="float32"),                     
        "平移差分边缘滤波器5":np.array((
                [0, 0, 0],
                [0, 1, -1],
                [0, 0, 0]), dtype="float32"),                         
        "平移差分边缘滤波器6":np.array((
                [0, 0, 0],
                [0, 1, 0],
                [0, -1, 0]), dtype="float32"),  
        "匹配边缘滤波1": np.array((
                [-1, -1, -1],
                [0, 0, 0],
                [1, 1,1]), dtype="float32"),                   
        "匹配边缘滤波2":np.array((
                [-1, 0, 1],
                [-1, 0, 1],
                [-1, 0,1]), dtype="float32"),                    
                
        "边缘检测滤波器1":np.array((
                [-1, 0, -1],
                [0, 4, 0],
                [-1, 0,-1]), dtype="float32"),
        "边缘检测滤波器2":np.array((
                [-1, -1, -1],
                [-1, 8, -1],
                [-1, -1,-1]), dtype="float32"),         
        "边缘检测滤波器3":np.array((
                [-1, -1, -1],
                [-1, 9, -1],
                [-1, -1,-1]), dtype="float32"),                         
                
        "边缘检测滤波器4":np.array((
                [1, -2, 1],
                [-2, 4, -2],
                [1, -2,1]), dtype="float32"),                          
                
        "梯度边缘滤波器1":np.array((
                [1, 1, 1],
                [1, -2, 1],
                [-1, -1,-1]), dtype="float32"),        
        "梯度边缘滤波器2":np.array((
                [1, 1, 1],
                [-1, -2, 1],
                [-1, -1,1]), dtype="float32"),        
        "梯度边缘滤波器3":np.array((
                [-1, 1, 1],
                [-1, -2, 1],
                [-1, 1,1]), dtype="float32"),   
        "梯度边缘滤波器4":np.array((
                [-1, -1, 1],
                [-1, -2, 1],
                [1, 1,1]), dtype="float32"),  
        "自定义":np.array((
        [0.0625, 0.125, 0.0625],
        [0.125, 0.25, 0.125],
        [0.0625, 0.125, 0.0625]), dtype="float32")
                
            }

def CovFilter(inputimg,cov):
    dst = cv2.filter2D(inputimg, -1, cov)
    return dst
def CovFilterTH(inputimg,Covlist):
    
    combolist=[key for key in Covlist.keys()]
    tcombolist=tuple(combolist)
    
    layout= [
             [sg.Button('Exit')],
             [sg.Text('卷积核选择',size=(15, 1)),sg.Combo(tcombolist, default_value="高斯滤波器",size=(50, 1),key='-cov-') ],
             [sg.Text('当前卷积核',size=(50, 1),key='-text-')],
             [sg.Input('0.0625',size=(10, 1),key='-00-'),sg.Input('0.125',size=(10, 1),key='-01-'),sg.Input('0.0625',size=(10, 1),key='-02-')],
             [sg.Input('0.125',size=(10, 1),key='-10-'),sg.Input('0.25',size=(10, 1),key='-11-'),sg.Input('0.125',size=(10, 1),key='-12-')],
             [sg.Input('0.0625',size=(10, 1),key='-20-'),sg.Input('0.125',size=(10, 1),key='-21-'),sg.Input('0.0625',size=(10, 1),key='-22-')],
             
             [sg.Image(filename='', key='-IMAGE-')],             
                ]
    win = sg.Window('卷积图像滤波器', layout,disable_close=True)
    cov=Covlist[combolist[0]]
    def flash(win): 
        win_active=True
        event=True
        while win_active:
            event, values = win.read(timeout=30)
            if values['-cov-']!="自定义":
                cov=Covlist[values['-cov-']]
                win.Element('-00-').Update(str(cov[0][0]))
                win.Element('-01-').Update(str(cov[0][1]))
                win.Element('-02-').Update(str(cov[0][2]))
                win.Element('-10-').Update(str(cov[1][0]))
                win.Element('-11-').Update(str(cov[1][1]))
                win.Element('-12-').Update(str(cov[1][2]))
                win.Element('-20-').Update(str(cov[2][0]))
                win.Element('-21-').Update(str(cov[2][1]))
                win.Element('-22-').Update(str(cov[2][2]))
                
 
            else:
                cov=np.array((
                            [0.0625, 0.125, 0.0625],
                            [0.125, 0.25, 0.125],
                            [0.0625, 0.125, 0.0625]), dtype="float32")
                
                
                cov[0][0]=float(values['-00-']) if is_number(values['-00-']) else 1
                cov[0][1]=float(values['-01-']) if is_number(values['-01-']) else 1
                cov[0][2]=float(values['-02-']) if is_number(values['-02-']) else 1
                cov[1][0]=float(values['-10-']) if is_number(values['-10-']) else 1
                cov[1][1]=float(values['-11-']) if is_number(values['-11-']) else 1
                cov[1][2]=float(values['-12-']) if is_number(values['-12-']) else 1
                cov[2][0]=float(values['-20-']) if is_number(values['-20-']) else 1
                cov[2][1]=float(values['-21-']) if is_number(values['-21-']) else 1
                cov[2][2]=float(values['-22-']) if is_number(values['-22-']) else 1
                
                if sum(sum(cov))==0 or sum(sum(cov))==1:
                    pass
                else:                    
                    cov=cov/sum(sum(cov))        

            output=CovFilter(inputimg,cov)
            imgbytes = cv2.imencode('.png', output)[1].tobytes()
            win['-IMAGE-'].update(data=imgbytes)
            #win['-OUTPUT-'].update("video window:"+str(task0.is_alive()))
            if event is None or event == 'Exit':
                win.close()
                win_active = False                                        
                break 
    flash(win) 
img = cv2.imread("YMQ.jpg", 0)
CovFilterTH(img,Covlist)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号