Logga in
Googles appar
Huvudmeny
Post a Comment On:
cbloom rants
"06-16-11 - Optimal Halve for Doubling Filter"
No comments yet. -
1 – 0 of 0
I've touched on this topic
several times
in
the past
. I'm going to wrap up a loose end. Say you have some given linear doubling filter (linear in the operator sense, not that it's a line). You wish to halve your image in the best way such that the round trip has minimum error. For a given discrete doubling filter (non-interpolating) find the optimal halving filter that minimizes L2 error. I did it numerically, not analytically, and measured the actual error of down->up vs. original on a large test set. I generated halving filters for half-widths of 3,4, and 5. Large filters always produce lower error, but also more ringing, so you may not want the largest width halving filter. upfilter :
linear
: const float c_filter[4] = { 0.12500, 0.37500, 0.37500, 0.12500 }; downFilter : const float c_filter[6] = { -0.15431, 0.00162, 0.65269, 0.65269, 0.00162, -0.15431 }; fit err = 17549.328 downFilter : const float c_filter[8] = { 0.05429, -0.21038, -0.01115, 0.66724, 0.66724, -0.01115, -0.21038, 0.05429 }; fit err = 17238.310 downFilter : const float c_filter[10] = { 0.05159, 0.00138, -0.21656, -0.00044, 0.66402, 0.66402, -0.00044, -0.21656, 0.00138, 0.05159 }; fit err = 16959.596 upfilter :
mitchell1
: const float c_filter[8] = { -0.00738, -0.01172, 0.12804, 0.39106, 0.39106, 0.12804, -0.01172, -0.00738 }; downFilter : const float c_filter[6] = { -0.13475, 0.02119, 0.61356, 0.61356, 0.02119, -0.13475 }; fit err = 17496.548 downFilter : const float c_filter[8] = { 0.05595, -0.19268, 0.00985, 0.62688, 0.62688, 0.00985, -0.19268, 0.05595 }; fit err = 17131.069 downFilter : const float c_filter[10] = { 0.05239, 0.00209, -0.19664, 0.01838, 0.62379, 0.62379, 0.01838, -0.19664, 0.00209, 0.05239 }; fit err = 16811.168 upfilter :
lanczos4
: const float c_filter[8] = { -0.00886, -0.04194, 0.11650, 0.43430, 0.43430, 0.11650, -0.04194, -0.00886 }; downFilter : const float c_filter[6] = { -0.09637, 0.05186, 0.54451, 0.54451, 0.05186, -0.09637 }; fit err = 17332.452 downFilter : const float c_filter[8] = { 0.04290, -0.14122, 0.04980, 0.54852, 0.54852, 0.04980, -0.14122, 0.04290 }; fit err = 17054.006 downFilter : const float c_filter[10] = { 0.03596, 0.00584, -0.13995, 0.05130, 0.54685, 0.54685, 0.05130, -0.13995, 0.00584, 0.03596 }; fit err = 16863.054 upfilter :
lanczos5
: const float c_filter[10] = { 0.00551, -0.02384, -0.05777, 0.12982, 0.44628, 0.44628, 0.12982, -0.05777, -0.02384, 0.00551 }; downFilter : const float c_filter[6] = { -0.08614, 0.07057, 0.51557, 0.51557, 0.07057, -0.08614 }; fit err = 17323.692 downFilter : const float c_filter[8] = { 0.05112, -0.13959, 0.06782, 0.52065, 0.52065, 0.06782, -0.13959, 0.05112 }; fit err = 16899.712 downFilter : const float c_filter[10] = { 0.04554, 0.00403, -0.13655, 0.06840, 0.51857, 0.51857, 0.06840, -0.13655, 0.00403, 0.04554 }; fit err = 16566.352 ------------------------------
posted by cbloom at
5:01 PM
on Jun 16, 2011
Leave your comment
You can use some HTML tags, such as
<b>, <i>, <a>
This blog does not allow anonymous comments.
Comment moderation has been enabled. All comments must be approved by the blog author.
Google Account
You will be asked to sign in after submitting your comment.
"06-16-11 - Optimal Halve for Doubling Filter"
No comments yet. -