python离散余弦变换_【DCT】OPENCV python 离散余弦变换问题

4)令差值图像diffy=|y1 -y2|,diffy灰度化后如 图3d所示;

142009_7wlD_2308599.jpg

我的Python代码:

# -*- coding: utf-8 -*-

# import the necessary packages

import numpy as np

import argparse

import cv2

from matplotlib import pyplot as plt

from matplotlib.colors import Normalize

# 将图像转换到灰度空间

y = cv2.imread('images/beifenshi01.jpg',0)

rows, cols = y.shape[:2]

print rows

print cols

# 为了消除图像中孤立的噪声点,并且较好的保护图像的边缘信息,

# 选择 3(像素)×3(像素)模板,对灰度图像 y 进 行中值滤波去噪得到 y1

y1 = cv2.medianBlur(y, 3)

print y1

# 将 y1 用 8(像素)×8(像素)模板做离散余弦变换得到 dct1

imf = np.float32(y1)/255.0 # float conversion/scale

print imf

Trans = cv2.dct(imf) # the dct

print Trans

dct1 = np.uint8(Trans) * 255 # convert back

print dct1

# 为了去除图像的细节,保留图像的轮廓信息,保留 DCT 变换后的低频信号,

# 用低频信号值的一半作为阈值,截断高频信号,然后进行反离散余弦变换,

# 重新将图像转换到灰度空间,得到灰度 图像 y2

imd = dct1[0:8, 0:8]

threshold = np.mean(imd)/2

print threshold

# 像素阈值过滤???

ret, img = cv2.threshold(dct1, threshold, 255, cv2.THRESH_TRUNC)

print img

imgf = np.float32(img)

print imgf

iTrans = cv2.idct(imgf)

print iTrans

y2 = np.uint8(iTrans)

print y2

# 令差值图像 diffy=|y1 - y2|,diffy 灰度化

diffy = cv2.absdiff(y1, y2) # 计算两个数组差值的绝对值

print diffy

plt.subplot(231),plt.imshow(y1, cmap = 'gray')

plt.title('Input Image'), plt.xticks([]), plt.yticks([])

plt.subplot(232),plt.imshow(dct1, cmap = 'gray')

plt.title('Image DCT1'), plt.xticks([]), plt.yticks([])

plt.subplot(233),plt.imshow(iTrans, cmap = 'gray')

plt.title('Image iTrans'), plt.xticks([]), plt.yticks([])

plt.subplot(234),plt.imshow(y2, cmap = 'gray')

plt.title('Image y2'), plt.xticks([]), plt.yticks([])

plt.subplot(235),plt.imshow(diffy, cmap = 'gray')

plt.title('Image log_mat'), plt.xticks([]), plt.yticks([])

plt.subplot(236),plt.imshow(diffy, cmap = 'gray')

plt.title('Image diffy'), plt.xticks([]), plt.yticks([])

plt.show()

我的结果:

142023_Mk92_2308599.jpg

问题:

1、根据论文描述,将 y1 用 8(像素)×8(像素)模板做离散余弦变换得到 dct1,上述代码实现是否正确?

2、用低频信号值的一半作为阈值,截断高频信号,上述代码是否正确?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值