我正在尝试实现插值算法的修改版本,其中所有来自有效邻域的值被平均。例如,在绿色通道中:see
但我想我在填写缺失值时遇到了问题。
Here is my output
This is the output I'm expecting
我似乎得到了这些网格线的输出,这是-我猜,丢失像素。我不知道我在哪里犯了这个错误,所以任何帮助将不胜感激!
下面是我的代码:
# read image
img = io.imread(filename_Grayimage, as_gray =True)
h,w = img.shape
# set figure size of the plot
plt.figure(figsize=(10,8))
# our final image will be a 3 dimensional image with 3 channels
rgb = np.zeros((h,w,3),np.uint8)
# reconstruction of the green channel IG
IG = np.copy(img) # copy the image into each channel
for row in range(0,h,4): # loop step is 4 since our mask size is 4.
for col in range(0,w,4): # loop step is 4 since our mask size is 4.
# Shaded Image Locations
gA = int(img[row, col])
gC = int(img[row, col+2])
gF = int(img[row+1, col+1])
gH = int(img[row+1, col+3])
gI = int(img[row+2, col])
gK = int(img[row+2, col+2])
gN = int(img[row+3, col+1])
gP = int(img[row+3, col+3])
# Equations for valid neighbours
# B = (A+C+F)/3
# D = (C+H)/2
# E = (A+F+I)/3
# G = (F+C+H+K)/4
# J = (F+I+K+N)/4
# L = (H+K+P)/3
# M = (I+N)/2
# O = (N+K+P)/2
# TODO: compute pixel value for each location where mask is unshaded (0)
# interpolate each pixel using its every valid (shaded) neighbors
IG[row, col+1] = (gA+gC+gF)/3 # B
IG[row, col+3] = (gC+gH)/2 # D
IG[row+1, col+1] = (gA+gF+gI)/3 # E
IG[row+1, col+2] = (gF+gC+gH+gK)/4 # G
IG[row+2, col+2] = (gF+gI+gK+gN)/4 # J
IG[row+2, col+3] = (gH+gK+gP)/3 # L
IG[row+3, col] = (gI+gN)/2 # M
IG[row+3, col+2] = (gN+gK+gP)/2 # O
# [x] TODO: show green (IR) in first subplot (221) and add title - refer to rgb one for hint on plotting
plt.subplot(221)
plt.imshow(IG, cmap='gray')
plt.title('IG')
2条答案
按热度按时间eblbsuwk1#
图表是“超级混乱”,因为它显示了图像的赏金。
不在边缘中的所有红色/蓝色像素具有4个有效的绿色相邻像素。
根本不应该有3个邻居的平均值(除了边缘)。
看一下
G
(假设为红色像素):x一米一纳米一x =(x一米二纳米一x + x一米三纳米一x + x一米四纳米一x + x一米五纳米一x)/ 4
看一下
J
(假设为蓝色像素):x一米七氮一x =(x一米八氮一x + x一米九氮一x + x一米十氮一x + x一米十一氮一x)/ 4
除页边空白外,我们可适用下列规则:
处理边距:
为了简化,我们可以在图像的顶部填充一行,底部填充一行,左侧填充一列,右侧填充一列。
在填充图像中,每个红/蓝像素有4个“有效”的绿色相邻像素。
对于填充,我们采用第二相邻行/列(而不是第一相邻行/列)以保持正确的Bayer对齐。
您没有发布输入图像...我创建了以下图像与GRBG拜耳对齐测试:
代码示例:
输出:
voj3qocg2#
这看起来像一个练习,所以我不会告诉你错误,希望这能帮助你自己找到错误。
基本算法是正确的 *,但有两个问题的实现。仔细看看你的方程和插值代码再次。你猜可能有丢失的像素,所以检查a)正确的像素被替换和b)被替换的像素有正确的值。
我将向您介绍一些可以用来捕获此类错误的方法。
**使用输出完全已知的简单图像进行测试。**我指的是全黑、全白色和全灰图像。这里这些图像的输出应该与输入相同。是这样吗?如果不是,是否有可识别的模式可以缩小问题范围?
**用更简单的算法替换该算法。**如果将插值替换为将所有插值像素设置为固定值,则应该能够找到其他问题如果您使用具有单个强度值的输入图像,则会更加明显(例如255),但你也会在输入图像中看到这个错误。这个错误通过将输入图像复制到输出图像中而被隐藏,但你会注意到实际的GBRG或GRBG图像作为输入。