0
点赞
收藏
分享

微信扫一扫

太赫兹成像降噪算法笔记

RockYoungTalk 2022-04-06 阅读 64
python

使用opencv的图像算法记录

1.从视频中抽帧

def get_frame_fromfile(file,frame):
    cap=cv2.VideoCapture(file)
    print(cap.get(0))#当前帧
    print(cap.get(7))#总帧数
    cap.set(cv2.CAP_PROP_POS_FRAMES,frame)
    success,data=cap.read()
    if success:
        return data

capture.get(0)   视频文件的当前位置(播放)以毫秒为单位
capture.get(1)   基于以0开始的被捕获或解码的帧索引
capture.get(2)   视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
capture.get(3)   在视频流的帧的宽度
capture.get(4)   在视频流的帧的高度
capture.get(5)   帧速率
capture.get(6)   编解码的4字-字符代码
capture.get(7)   视频文件中的帧数
capture.get(8)   返回对象的格式
capture.get(9)   返回后端特定的值,该值指示当前捕获模式
capture.get(10)   图像的亮度(仅适用于照相机)
capture.get(11)   图像的对比度(仅适用于照相机)
capture.get(12)   图像的饱和度(仅适用于照相机)
capture.get(13)   色调图像(仅适用于照相机)
capture.get(14)   图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
capture.get(15)   曝光(仅适用于照相机)
capture.get(16)   指示是否应将图像转换为RGB布尔标志
capture.get(17)   × 暂时不支持
capture.get(18)   立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)

该部分参考:https://blog.csdn.net/u011436429/article/details/80604590

2.灰度化图像

def turn_gray(image):
    image_high=image.shape[0]
    image_width=image.shape[1]
    temp = np.arange(0, image.size/image.shape[2], 1)
    temp = temp.reshape(image_high, image_width)
    for i in range(image_high):
        for j in range(image_width):
            temp[i][j]=image[i][j][0]
    return temp

3.绘制灰度图

def show_image(test_image):
    image = PIL.Image.fromarray(test_image).convert("L")
    plt.imshow(image, cmap=plt.cm.hot)
    plt.colorbar(cax=None, ax=None, shrink=0.5)
    plt.show()

其中绘图颜色由以下代码修改

 plt.imshow(image, cmap=plt.cm.hot)

hot可以修改为其他参数,具体如下。参考自:matplotlib官方文档
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4.一种基于均值滤波的滤波算法

def noise_reduction(image):
    image_new=image
    for i in range(30):
        for j in range(30):
            averange=(image[i][j]+image[i][j+2]+image[i+2][j]+image[i+1][j]+image[i][j+1]+image[i+1][j+1]+image[i+2][j+2]+image[i+2][j+1]+image[i+1][j+2])/9
            if (averange>np.average(image)+150):#阈值1
                image_new[i+1][j+1]=255
            if (averange>image[i+1][j+1]+150):#阈值2
                image_new[i + 1][j + 1] = 255
    return image_new

后续可能会补充解释,主要是计算3X3格子内中间像素值与周围像素均值和整个图像像素君主的差异,根据差异大小判断是否是噪声需要去除,=255即为二值化去除噪声。

5.计算信息熵

def entropy(image):
    tmp = []
    for i in range(256):
        tmp.append(0)
    val = 0
    k = 0
    res = 0
    img = np.array(image)
    for i in range(len(img)):
        for j in range(len(img[i])):
            val = img[i][j]
            tmp[val] = float(tmp[val] + 1)
            k = float(k + 1)
    for i in range(len(tmp)):
        tmp[i] = float(tmp[i] / k)
    for i in range(len(tmp)):
        if (tmp[i] == 0):
            res = res
        else:
            res = float(res - tmp[i] * (math.log(tmp[i]) / math.log(2.0)))
    return res
举报

相关推荐

0 条评论