4)令差值图像diffy=|y1 -y2|,diffy灰度化后如 图3d所示;
我的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()
我的结果:
问题:
1、根据论文描述,将 y1 用 8(像素)×8(像素)模板做离散余弦变换得到 dct1,上述代码实现是否正确?
2、用低频信号值的一半作为阈值,截断高频信号,上述代码是否正确?