hobart的个人博客分享 http://blog.sciencenet.cn/u/hobart

博文

工业领域机器视觉的算法原理与应用实践(2):图像增强

已有 659 次阅读 2024-10-23 11:44 |系统分类:教学心得

图像增强

1、灰度值增强

1.1 计算公式

image.png

image.png

其中:g’为增强后灰度值,g为增强前灰度值,mult, add为增强参数。灰度值超出[0,255]范围的将被截断。

1.2 代码实验

import cv2

import numpy as np

mult = 2

add = 0

img=cv2.imread('vessel.png',0)

scale_img = np.zeros((img.shape[0],img.shape[1]),dtype = np.uint8)

for i in range(img.shape[0]):

    for j in range(img.shape[1]):

        g = int(add + img[i,j].astype(int)*mult)

        if g <0:

            g =0

        if g > 255:

            g = 255

        scale_img[i,j] = g

cv2.imshow('orige image',img)

cv2.imshow('scale image',scale_img)

cv2.imwrite('vessel_scale.jpg',scale_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

实验结果:

左图为原图,右图为增强后图像。

  

2、对比度增强

2.1 计算公式

image.png

其中:g’为增强后灰度值,g为增强前灰度值,g_mean为图像灰度值均值,a为增强参数,灰度值超出[0,255]范围的将被截断比均值大的灰度值会增加,比均值小的灰度值会减少,结果是增强边界效果。

2.2 代码实验

import cv2

import numpy as np

a = 1.5

img=cv2.imread('mreut.png',0)

mean = cv2.blur(img, (9,9))

emphasize_img = np.zeros((img.shape[0],img.shape[1]),dtype = np.uint8)

for i in range(img.shape[0]):

    for j in range(img.shape[1]):

        g = round(img[i,j].astype(int)+a*(img[i,j].astype(int)-mean[i,j].astype(int)))

        if g <0:

            g =0

        if g > 255:

            g = 255

        emphasize_img[i,j] = g

cv2.imshow('origeimage',img)

cv2.imshow('emphasize image',emphasize_img)

cv2.imwrite('mreut_emphasize.jpg',emphasize_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

实验结果:

左图为原图,右图为增强后图像。

 

3 对比度归一化

3.1 计算公式为

image.png

其中:g’为增强后灰度值,g为增强前灰度值,gmin为图像最小灰度值,gmax为图像最大灰度值从公式可以看出,增强后的图像灰度值最小值为0,最大值为255

3.2 代码实验

import cv2

import numpy as np

img=cv2.imread('vessel.png',0)

g_max = img.max()

g_min = img.min()

scale_img = np.zeros((img.shape[0],img.shape[1]),dtype = np.uint8)

for i in range(img.shape[0]):

    for j in range(img.shape[1]):

        g = int(255*(img[i,j].astype(int)-g_min.astype(int))/(g_max.astype(int)-g_min.astype(int)))

        if g <0:

            g =0

        if g > 255:

            g = 255

        scale_img[i,j] = g

cv2.imshow('origeimage',img)

cv2.imshow('scale image max',scale_img)

cv2.imwrite('vessel_scale_max.jpg',scale_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

实验结果:

左图为原图,右图为增强后图像。

  

注:本系列博客为本人讲授机器人视觉识别技术教案整理,使用教程为:机器视觉算法与应用,作者:[]Carten Steger等,清华大学出版社,2019年第2版,ISBN 978-7-302-51905-8。实验软件如下:

1)德国MVTec公司软件halcon 20.11.1.0,下载官网:https://www.mvtec.com/cn/products/halcon/free-halcon-trial,每月evaluation licenses下载地址:https://blog.csdn.net/qq_18620653/article/details/120033443

2python环境和核心库:anaconda + pycharmpython:3.8.16opencv-python:4.7.0.72



https://blog.sciencenet.cn/blog-3618661-1456609.html

上一篇:工业领域机器视觉的算法原理与应用实践(1):图像的数据结构
下一篇:工业领域机器视觉的算法原理与应用实践(3):直方图均衡化
收藏 IP: 212.107.29.*| 热度|

1 杨正瓴

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-1 13:22

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部