#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PIL import Image
def filter2d(input_img, filter, frame):
"""filter of the 2-dimension picture"""
size = len(input_img), len(input_img[0])
output = []
for i in xrange(size[0]):
temp = []
for j in xrange(size[1]):
temp.append(filter(input_img, (i, j), frame))
output.append(temp)
return output
def minimizeFilter(input_img, point, size):
"""minimize filter for the input image"""
begin = (point[0] - size[0] / 2, point[0] + size[0] / 2 + 1)
end = (point[1] - size[1] / 2, point[1] + size[1] / 2 + 1)
l = []
for i in xrange(*begin):
for j in xrange(*end):
if (i >= 0 and i < len(input_img)) and (j >= 0 and j < len(input_img[0])):
l.append(input_img[i][j])
return min(l)
def convertImageToMatrix(image):
size = image.size
out = []
for x in xrange(size[1]):
temp = []
for y in xrange(size[0]):
temp.append(image.getpixel((y, x)))
out.append(temp)
return out
def boxFilter(im, radius):
"""box filter for the image of the radius"""
height, width = len(im), len(im[0])
imDst = []
imCum = []
for x in xrange(height):
imDst.append([0.0] * width)
imCum.append([0.0] * width)
#cumulative sum over Y axis
for i in xrange(width):
for j in xrange(height):
if j == 0:
imCum[j][i] = im[j][i]
else:
imCum[j][i] = im[j][i] + imCum[j - 1][i]
#difference over Y axis
for j in xrange(radius + 1):
for i in xrange(width):
imDst[j][i] = imCum[j + radius][i]
for j in xrange(radius + 1, height - radius):
for i in xrange(width):
imDst[j][i] = imCum[j + radius][i] - imCum[j - radius - 1][i]
for j in xrange(height - radius, height):
for i in xrange(width):
imDst[j][i] = imCum[height - 1][i] - imCum[j - radius - 1][i]
#cumulative sum over X axis
for j in xrange(height):
for i in xrange(width):
if i == 0:
imCum[j][i] = imDst[j][i]
else:
imCum[j][i] = imDst[j][i] + imCum[j][i - 1]
#difference over X axis
for j in xrange(height):
for i in xrange(radius + 1):
imDst[j][i] = imCum[j][i + radius]
for j in xrange(height):
for i in xrange(radius + 1, width - radius):
imDst[j][i] = imCum[j][i + radius] - imCum[j][i - radius - 1]
for j in xrange(height):
for i in xrange(width - radius, width):
imDst[j][i] = imCum[j][width - 1] - imCum[j][i - radius - 1]
return imDst
def dot(matrix1, matrix2, operation):
"""dot operation for the matrix1 and matrix2"""
out = []
size = len(matrix1), len(matrix1[0])
for x in xrange(size[0]):
temp = []
for y in xrange(size[1]):
temp.append(operation(matrix1[x][y], matrix2[x][y]))
out.append(temp)
return out
def guidedFilter(srcImage, guidedImage, radius, epsilon):
"""guided filter for the image
src image must be gray image
guided image must be gray image
"""
size = srcImage.size
src = convertImageToMatrix(srcImage)
guided = convertImageToMatrix(guidedImage)
one = []
for x in xrange(size[1]):
one.append([1.0] * size[0])
n = boxFilter(one, radius)
plus = lambda x, y: x + y
minus = lambda x, y: x - y
multiple = lambda x, y: x * y
divide = lambda x, y: x / y
meanI = dot(boxFilter(src, radius), n, divide)
meanP = dot(boxFilter(guided, radius), n, divide)
meanIP = dot(boxFilter(dot(src, guided, multiple), radius), n, divide)
covIP = dot(meanIP, dot(meanI, meanP, multiple), minus)
meanII = dot(boxFilter(dot(src, src, multiple), radius), n, divide)
varI = dot(meanII, dot(meanI, meanI, multiple), minus)
epsilonMatrix = []
for x in xrange(size[1]):
epsilonMatrix.append([epsilon] * size[0])
a = dot(covIP, dot(varI, epsilonMatrix, plus), divide)
b = dot(meanP, dot(a, meanI, multiple), minus)
meanA = dot(boxFilter(a, radius), n, divide)
meanB = dot(boxFilter(b, radius), n, divide)
return dot(dot(meanA, src, multiple), meanB, plus)
没有合适的资源?快使用搜索试试~ 我知道了~
基于python实现经典去雾算法
共13个文件
png:10个
py:2个
pyc:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 104 浏览量
2022-07-12
21:34:29
上传
评论
收藏 1.71MB RAR 举报
温馨提示
基于python实现经典去雾算法
资源推荐
资源详情
资源评论
收起资源包目录
基于python实现经典去雾算法.rar (13个子文件)
基于python实现经典去雾算法
3_dark.png 16KB
4_dark.png 30KB
4_haze.png 360KB
dark.py 3KB
3_haze.png 191KB
1.png 248KB
guidedfilter.pyc 5KB
4_guided.png 81KB
guidedfilter.py 4KB
2.png 124KB
4.png 445KB
3_guided.png 49KB
3.png 198KB
共 13 条
- 1
资源评论
Sherry_shiry
- 粉丝: 2
- 资源: 1097
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功