小编mos*_*ski的帖子

Scipy插值如何将3x3矩阵调整大小/重新采样到5x5?

编辑:保罗在下面解决了这个问题.谢谢!

我正在尝试将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)

python interpolation numpy scipy resampling

10
推荐指数
2
解决办法
9825
查看次数

Python PIL - 分割混合两个图像的功能?

编辑:感谢马克和西风,代码现在正在运作.西风还有以下两种替代工作方案.

我想用PIL分割混合两个图像.我发现ImageChops.multiply(image1, image2)但我找不到类似的divide(image, image2)功能.

分割混合模式解释(我在这里使用前两个图像作为我的测试源.)

是否有我错过的内置分频混合功能(PIL或其他)?

我的测试代码在下面运行,并且正在接近我正在寻找的内容.生成的图像输出类似于此处的除法混合示例图像:分割混合模式说明.

是否有更有效的方法来进行分割混合操作(更少步骤和更快)?起初,我尝试使用lambda函数Image.evalImageMath.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

7
推荐指数
1
解决办法
5736
查看次数

这个python图像模糊功能有什么问题?

编辑:感谢霍华德,我已经纠正了这里的代码,现在似乎正在运作.

编辑2:我已经更新了代码,以包含原始预期的垂直模糊.得到的样本输出具有各种设置:模糊比较images.jpg

模糊操作的另一个参考(Java):初学者模糊


原帖:

我正在尝试学习基本的图像处理,并在python中复制这个简单的Blur方法(第二个函数BlurHorizo​​ntal在"Reusing results"下).我知道PIL中已经存在模糊功能,但我想自己尝试基本的像素操作.

此函数应采用源图像,然后基于特定半径平均RGB像素值,并将处理后的图像写入新文件.我的问题是我得到了很多具有完全错误的平均值的像素(例如,亮绿线而不是某些区域的红色).

在模糊半径为2的情况下,平均方法将以输入像素为中心的5个像素的RGB值相加.它使用"滑动窗口"来保持运行总计,减去输出像素(左侧)并添加新的输入像素(窗口右侧).模糊方法在这里解释

示例:模糊测试图像output.jpg

我出错的任何想法?我不确定为什么图像的某些部分会干净地模糊,而其他区域则充满了与周围区域完全无关的颜色.

谢谢你的帮助.

固定工作代码(感谢霍华德)

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)

python image-processing gaussian blur

5
推荐指数
1
解决办法
3790
查看次数