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。显然,除以较大的数字会使过滤器的结果不太强。