Python 将过滤器应用于“.png”图像时出现问题,尽管过滤器适用于“.tif”图像

Python 将过滤器应用于“.png”图像时出现问题,尽管过滤器适用于“.tif”图像,python,python-3.x,image-processing,filtering,Python,Python 3.x,Image Processing,Filtering,我有两个图像,我想应用过滤器。第一个是.tif黑白,另一个是.png黑白,但是(我想)有一个彩色通道 以下是有关图像的详细信息: 这是两张原始图片 cameraman.tif: einstein.png: 我对第一张图像cameraman.tif应用过滤器没有问题,结果如下: 关于第二幅图像(einstein.png),我必须首先以灰度格式读取它,以便能够应用过滤器。但当我应用过滤器时,图像不会改变: 代码如下: import matplotlib.image as mpimg impo

我有两个图像,我想应用过滤器。第一个是
.tif
黑白,另一个是
.png
黑白,但是(我想)有一个彩色通道

以下是有关图像的详细信息:

这是两张原始图片

cameraman.tif

einstein.png

我对第一张图像
cameraman.tif
应用过滤器没有问题,结果如下:

关于第二幅图像(
einstein.png
),我必须首先以灰度格式读取它,以便能够应用过滤器。但当我应用过滤器时,图像不会改变:

代码如下:

import matplotlib.image as mpimg
import numpy as np
from skimage import color
from skimage import io

img =  plt.imread('cameraman.tif')
einstein_bw = color.rgb2gray(io.imread('einstein.png'))

def contrast(img, size=5):
    filtered = np.zeros_like(img)
    H, W = img.shape
    for i in range(size//2, H-size//2):
        for j in range(size//2, W-size//2):
            patch = img[i-size//2:i+size//2+1, j-size//2:j+size//2+1]
            filtered[i,j] =  1.2*img[i, j] - 1/(size**2)*np.mean(patch)
    return filtered

contrasted = contrast(img, 3)
plt.imshow(contrasted, cmap='gray')
plt.savefig('cameraman_contrast.png')

contrasted = contrast(einstein_bw, 5)
plt.imshow(contrasted, cmap='gray')
plt.savefig('einstein_contrast.png')

这可能是一个显示问题。爱因斯坦的图像比摄影师的图像大得多。显示如此大的图像会导致对其进行二次采样(像素被删除)。这也许可以解释为什么你看不到过滤的效果。
1/(大小**2)*np.mean(补丁)
是什么意思?你把平均值除以过滤器的大小?看来你最后正常化了两次!谢谢你的评论@CrisLuengo。那么,在接受您的第一个评论时,我是否过度使用了子采样效果并有效地过滤了图像?关于第二个问题:我试着不除以过滤器的大小,但是输出得到了对比度。我的意思是说你正在过滤图像,但是由于图像的显示方式,你无法分辨。“我试过不除以过滤器的大小,但输出会有对比度”这不是过滤的重点吗?在爱因斯坦的图像中,你将平均值除以25,在另一幅图像中,你将平均值除以9。显然,除以较大的数字会使过滤器的结果不太强。