ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

与matlab里面 imadjust 函数相同的python代码

2021-06-12 10:05:37  阅读:298  来源: 互联网

标签:src vout python vin bisect imadjust matlab tol cum


          正在做一个把matlab程序转python的工作,遇到 matlab里面的 imadjust 函数,但是找了一圈没有对应的python函数,需要自定义一个函数

import numpy as np
from bisect import bisect_left

 # 已测试完毕,成功
    def imadjust(src, tol=1, vin=[0, 255], vout=(0, 255)):
        # src : input one-layer image (numpy array)
        # tol : tolerance, from 0 to 100.
        # vin  : src image bounds
        # vout : dst image bounds
        # return : output img
        assert len(src.shape) == 2, 'Input image should be 2-dims'
        tol = max(0, min(100, tol))
        if tol > 0:
            # Compute in and out limits
            # Histogram
            hist = np.histogram(src, bins=list(range(256)), range=(0, 255))[0]
            # Cumulative histogram
            cum = hist.copy()
            for i in range(1, 255): cum[i] = cum[i - 1] + hist[i]
            # Compute bounds
            total = src.shape[0] * src.shape[1]
            low_bound = total * tol / 100
            upp_bound = total * (100 - tol) / 100
            vin[0] = bisect_left(cum, low_bound)
            vin[1] = bisect_left(cum, upp_bound)
        # Stretching
        scale = (vout[1] - vout[0]) / (vin[1] - vin[0])
        vs = src - vin[0]
        vs[src < vin[0]] = 0
        vd = vs * scale + 0.5 + vout[0]
        vd[vd > vout[1]] = vout[1]
        dst = vd
        return dst

          src是一个二维矩阵,数据类型为uint8(0-255,用来表示灰度值),测试结果和matlab基本一模一样。做到了同输入同输出。

          用到了 bisect_left 它的用法可以参考 python:从整数列表(数组)中获取最接近给定值的数字

          当然,最好看文档 bisect — 数组二分查找算法,讲的比较好

标签:src,vout,python,vin,bisect,imadjust,matlab,tol,cum
来源: https://www.cnblogs.com/2944014083-zhiyu/p/14877675.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有