编辑:保罗在下面解决了这个问题.谢谢!
我正在尝试将3x3矩阵重新采样(升级)为5x5,使用interpolate.interp2d或interpolate.RectBivariateSpline(或其他任何工作)填充中间点.
如果有一个简单的现有函数来执行此操作,我想使用它,但我还没有找到它.例如,一个函数可以像:
# upscale 2x2 to 4x4
matrixSmall = ([[-1,8],[3,5]])
matrixBig = matrixSmall.resample(4,4,cubic)
Run Code Online (Sandbox Code Playgroud)
那么,如果我从一个3x3矩阵/数组开始:
0,-2,0
-2,11,-2
0,-2,0
Run Code Online (Sandbox Code Playgroud)
我想计算一个新的5x5矩阵("I"表示内插值):
0, I[1,0], -2, I[3,0], 0
I[0,1], I[1,1], I[2,1], I[3,1], I[4,1]
-2, I[1,2], 11, I[3,2], -2
I[0,3], I[1,3], I[2,3], I[3,3], I[4,3]
0, I[1,4], -2, I[3,4], 0
Run Code Online (Sandbox Code Playgroud)
我一直在搜索和阅读并尝试各种不同的测试代码,但我还没有弄清楚我正在尝试做什么的正确语法.我也不确定我是否需要在某些行中使用meshgrid,mgrid或linspace.
编辑:修复和工作感谢Paul
import numpy, scipy
from scipy import interpolate
kernelIn = numpy.array([[0,-2,0],
[-2,11,-2],
[0,-2,0]])
inKSize = len(kernelIn)
outKSize = 5
kernelOut = numpy.zeros((outKSize,outKSize),numpy.uint8)
x = numpy.array([0,1,2])
y = numpy.array([0,1,2])
z = kernelIn
xx = …Run Code Online (Sandbox Code Playgroud) 编辑:感谢马克和西风,代码现在正在运作.西风还有以下两种替代工作方案.
我想用PIL分割混合两个图像.我发现ImageChops.multiply(image1, image2)但我找不到类似的divide(image, image2)功能.
分割混合模式解释(我在这里使用前两个图像作为我的测试源.)
是否有我错过的内置分频混合功能(PIL或其他)?
我的测试代码在下面运行,并且正在接近我正在寻找的内容.生成的图像输出类似于此处的除法混合示例图像:分割混合模式说明.
是否有更有效的方法来进行分割混合操作(更少步骤和更快)?起初,我尝试使用lambda函数Image.eval和ImageMath.eval检查黑色像素及在分裂过程中它们翻转为白色,但我不能让任何产生正确的结果.
编辑:固定代码和缩短感谢马克和西风.得到的图像输出与下面的西风的numpy和scipy解决方案的输出相匹配.
# PIL Divide Blend test
import Image, os, ImageMath
imgA = Image.open('01background.jpg')
imgA.load()
imgB = Image.open('02testgray.jpg')
imgB.load()
# split RGB images into 3 channels
rA, gA, bA = imgA.split()
rB, gB, bB = imgB.split()
# divide each channel (image1/image2)
rTmp = ImageMath.eval("int(a/((float(b)+1)/256))", a=rA, b=rB).convert('L')
gTmp = ImageMath.eval("int(a/((float(b)+1)/256))", a=gA, b=gB).convert('L')
bTmp = ImageMath.eval("int(a/((float(b)+1)/256))", a=bA, b=bB).convert('L')
# merge channels into …Run Code Online (Sandbox Code Playgroud) python overlay blend image-processing python-imaging-library
编辑:感谢霍华德,我已经纠正了这里的代码,现在似乎正在运作.
编辑2:我已经更新了代码,以包含原始预期的垂直模糊.得到的样本输出具有各种设置:模糊比较images.jpg
模糊操作的另一个参考(Java):初学者模糊
原帖:
我正在尝试学习基本的图像处理,并在python中复制这个简单的Blur方法(第二个函数BlurHorizontal在"Reusing results"下).我知道PIL中已经存在模糊功能,但我想自己尝试基本的像素操作.
此函数应采用源图像,然后基于特定半径平均RGB像素值,并将处理后的图像写入新文件.我的问题是我得到了很多具有完全错误的平均值的像素(例如,亮绿线而不是某些区域的红色).
在模糊半径为2的情况下,平均方法将以输入像素为中心的5个像素的RGB值相加.它使用"滑动窗口"来保持运行总计,减去输出像素(左侧)并添加新的输入像素(窗口右侧).模糊方法在这里解释
我出错的任何想法?我不确定为什么图像的某些部分会干净地模糊,而其他区域则充满了与周围区域完全无关的颜色.
谢谢你的帮助.
固定工作代码(感谢霍华德)
import Image, numpy, ImageFilter
img = Image.open('testimage.jpg')
imgArr = numpy.asarray(img) # readonly
# blur radius in pixels
radius = 2
# blur window length in pixels
windowLen = radius*2+1
# columns (x) image width in pixels
imgWidth = imgArr.shape[1]
# rows (y) image height in pixels
imgHeight = imgArr.shape[0]
#simple box/window blur
def doblur(imgArr):
# create array for processed …Run Code Online (Sandbox Code Playgroud)