zoukankan      html  css  js  c++  java
  • 挑战图像处理100问(13)——MAX-MIN滤波

    在这里插入图片描述

    Max_Min Filter

    Author: Tian YJ
    原图如下:

    在这里插入图片描述
    MAX-MIN滤波器使用网格内像素的最大值和最小值的差值对网格内像素重新赋值。通常用于边缘检测

    边缘检测用于检测图像中的线。像这样提取图像中的信息的操作被称为特征提取

    边缘检测通常在灰度图像上进行。

    代码实现
    # -*- coding: utf-8 -*-
    """
    Created on Thu Apr  9 14:33:42 2020
    
    @author: Tian YJ
    """
    
    import cv2 # 我只用它来做图像读写和绘图,没调用它的其它函数哦
    import numpy as np # 进行数值计算
    
    
    # 定义Max_Min Filter函数
    def max_min_filter(img, K_size=3):
    	# 获取图像尺寸
    	H, W, C = img.shape
    	# padding
    	pad = K_size // 2 # 使滤波器中心能与图像边缘对齐
    	out = np.zeros((H+2*pad, W+2*pad, C), dtype=np.float)
    	out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)
    
    	tem = out.copy()
    
    	# 进行滤波
    	for x in range(H):
    		for y in range(W):
    			for c in range(C):
    				out[x+pad, y+pad, c] = np.max(tem[x:x+K_size, y:y+K_size, c])-np.min(tem[x:x+K_size, y:y+K_size, c])
    
    	out = out[pad:pad+H, pad:pad+W].astype(np.uint8)
    	return out
    
    # 这里需要把图像先灰度化
    # 直接用之前的灰度化代码
    # 灰度化函数
    def BGR2GRAY(img):
    
    	# 获取图片尺寸
    	H, W, C = img.shape
    
    	# 灰度化
    	out = np.ones((H,W,3))
    	for i in range(H):
    		for j in range(W):
    			out[i,j,:] = 0.299*img[i,j,0] + 0.578*img[i,j,1] + 0.114*img[i,j,2]
    
    	out = out.astype(np.uint8)
    
    	return out
    
    # 读取图片
    path = 'C:/Users/86187/Desktop/image/'
    
    
    file_in = path + 'cake.jpg' 
    file_out = path + 'max_min_filter.jpg' 
    img = cv2.imread(file_in)
    
    # 调用函数进行灰度化
    img = BGR2GRAY(img)
    # 调用函数进行Max_Min滤波
    out = max_min_filter(img)
    
    # 保存图片
    cv2.imwrite(file_out, out)
    cv2.imshow("result", out)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    结果展示
    原图 灰度图 Max_Min
    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
  • 相关阅读:
    SNIMissingWarning,InsecurePlatformWarning 以及 GotoBLAS : Architecture Initialization failed. No initialization function found.
    python-获取上个月全部周几
    Springboot-Jpa多数据库配置-2.0+版本
    springboot通过JdbcTemplate实现多数据库
    使用cuteftp实现SFTP上传
    Jar后台运行脚本 window-bat/unix-sh for springboot
    Invalid control character at: line 1 column 解决
    QTP常用function 老古董
    NoClassDefFoundError: javax/xml/bind/JAXBException-springboot
    MySQL
  • 原文地址:https://www.cnblogs.com/Jack-Tim-TYJ/p/12831915.html
Copyright © 2011-2022 走看看