Saturday, March 3, 2012
xBR vs HQx Interpolation Filter Comparison
UPDATE: the comparisons in this post aren't a true representation of hq2x (more info in this post). The xBR shots are still valid, but don't put much weight on the comparisons without reading the other post for context.
This post compares the popular HQx interpolation algorithm with the newer xBR, which has been covered in some of my other posts. If you just want to download the filters, you can get them from the link at the bottom of the post.
Since Maxim Stepin created the HQx interpolation algorithm more than a decade ago, it has been the favored real-time interpolation filter for the emulation scene. The way it works is it looks at each pixel and then compares its color to that of the 8 surrounding adjacent pixels. If it finds a match, the filter then compares the resulting pattern with a predefined lookup table to guess what the original pattern was trying to represent.
For example, if we take a pattern like this:

But, if you use HQ2x, you end up with this:

The algorithm guesses that the original pattern was trying to represent a diagonal line rather than a checkerboard pattern, so it fills in the gaps to compensate.
Recently, a Brazilian programmer by the name of Hyllian (aka Jararaca) developed a new algorithm that actually improves on HQx, known as xBR (stands for "a filter that scales By Rules").
xBR works much the same way as HQx insofar as it is based on pattern recognition, and it would upscale the above pattern with the same result. However, it goes further than HQx by using a 2-stage set of interpolation rules, which better handle more complex patterns such as antialiased lines and curves. The two main points that can be fine-tuned are the formula used to measure the distance between colors and the way the algorithm treats corners (more on the corners later).
Hyllian began development of xBR in 2011 as a plugin for Steve Snake's Genesis/Mega Drive emulator, Kega Fusion.
You can read more about Hyllian's algorithm here.
Lets take a look at how they compare on a real-world example (HQ2x on the left, 2xBR on the right; click to embiggen):
As you can see, 2xBR does a much better job on smoothing curves without getting chunky (see Yoshi's nose and the dragon coin). It also does a better job on the 'eyes' of the block, which is represented as a diagonal line with 2xBR compared with the series-of-squares look with HQ2x.
Here's another comparison, using Earthworm Jim's title screen:

HQ2x actually does a slightly better job at getting a smooth gradient around the highlight in Jim's eye, but the rest of the image is a mess. xBR has smoother, straighter lines at every color transition.
Additionally, the xBR algorithm scales to higher scale factors much more easily than the HQx algorithm, making 3-, 4-, 5- and higher versions faster and more effective.
At very high scale factors (5 and higher), the xBR algorithm can obliterate some small details, such as pupils in eyes, dots, and so on, so Hyllian introduced some additional calculation to compensate (5xBR-v3.5a on the left [uncompensated] vs 5xBR-v3.5b on the right [compensated]):

Of course, this compensation comes with its own drawbacks and false-positives, so which version works better varies on a game-by-game basis.
UPDATE: Hyllian has made a third variant that is even more cautious. Here's an animated GIF comparing the way each variant handles text:
Another interesting aspect of this algorithm is that it works very effectively on images already upscaled with xBR, so you can easily get absurdly large images (scaled 1x, 3x, 9x and 27x) with just a few iterations:
This puts it in direct and favorable competition with this vectorization method that recently made the rounds. xBR manages to maintain detail a bit better than the vectorizer, and it can actually operate in real-time, unlike the vectorizer.
You can download these shaders from my Mediafire repo (most are available in either XML/GLSL or Cg format, both of which are compatible with SSNES). UPDATE: KrossX ported 2xBR-v3.5a to ePSXe format and SimoneT ported 5xBR-v3.5a.
UPDATE: New Cg version of 5x variant. Runs approx. 25% faster. :)
UPDATE: new XML versions of 5xBR-v3.7. This package includes 3 variants (a, b and c), as well as the A-variant+scanlines.
UPDATE: Hyllian has been working on a new version that analyzes an image frame by frame and dynamically decides whether to apply xBR smoothing or Reverse-Anti-aliasing to produce the best picture. It handles text better than any filter/shader I've encountered, and it also excels at digitized, prerendered images and backgrounds. Here's a shot of it with Final Fantasy VI on GBA:
You can download this shader here.
UPDATE (4/19/2013): Another great update from Hyllian, this time adding 3 levels of analysis. This version runs a bit slower in my experience (unsurprisingly), but it now handles jagged edges that earlier versions simply couldn't detect, due to their 2-level analysis pattern. Compare this shot with the ones at the top of the post:
Notice that inclined bit of ground under the dragon/yoshi coin. This new version will also really help with Mega Man X games, which tended to have a lot of these sorts of gently sloping planes. You can download a Cg shader of this new version here, or a 3x scale Kega Fusion plugin here.
Closely related to xBR are the SABR shader by Joshua Street and Zenju's xBRZ CPU filter. SABR was written by Mr. Street as part of a school project and it differs from xBR in a couple of ways, including using antialiasing on edges. It was forked from Hyllian's 5xBR v3.7c shader. xBRZ is a rewrite of the xBR algorithm in C++, with some changes to the corner detection and color distance measurement. It was forked around xBR v3.5.
There is also a standalone library written in C that incorporates both the xBR algorithm (as it appears in FFmpeg's libavfilter) and Hqx. You can browse this project's source on github.
This post compares the popular HQx interpolation algorithm with the newer xBR, which has been covered in some of my other posts. If you just want to download the filters, you can get them from the link at the bottom of the post.
Since Maxim Stepin created the HQx interpolation algorithm more than a decade ago, it has been the favored real-time interpolation filter for the emulation scene. The way it works is it looks at each pixel and then compares its color to that of the 8 surrounding adjacent pixels. If it finds a match, the filter then compares the resulting pattern with a predefined lookup table to guess what the original pattern was trying to represent.
For example, if we take a pattern like this:
and scale it up via nearest neighbor--that is, a straight upscale with no interpolation--you end up with this checkerboard pattern:

But, if you use HQ2x, you end up with this:

The algorithm guesses that the original pattern was trying to represent a diagonal line rather than a checkerboard pattern, so it fills in the gaps to compensate.
Recently, a Brazilian programmer by the name of Hyllian (aka Jararaca) developed a new algorithm that actually improves on HQx, known as xBR (stands for "a filter that scales By Rules").
xBR works much the same way as HQx insofar as it is based on pattern recognition, and it would upscale the above pattern with the same result. However, it goes further than HQx by using a 2-stage set of interpolation rules, which better handle more complex patterns such as antialiased lines and curves. The two main points that can be fine-tuned are the formula used to measure the distance between colors and the way the algorithm treats corners (more on the corners later).
Hyllian began development of xBR in 2011 as a plugin for Steve Snake's Genesis/Mega Drive emulator, Kega Fusion.
You can read more about Hyllian's algorithm here.
Lets take a look at how they compare on a real-world example (HQ2x on the left, 2xBR on the right; click to embiggen):
As you can see, 2xBR does a much better job on smoothing curves without getting chunky (see Yoshi's nose and the dragon coin). It also does a better job on the 'eyes' of the block, which is represented as a diagonal line with 2xBR compared with the series-of-squares look with HQ2x.
Here's another comparison, using Earthworm Jim's title screen:

And here's a third comparison, using the title screen to Earthworm Jim 2:
HQ2x actually does a slightly better job at getting a smooth gradient around the highlight in Jim's eye, but the rest of the image is a mess. xBR has smoother, straighter lines at every color transition.
Additionally, the xBR algorithm scales to higher scale factors much more easily than the HQx algorithm, making 3-, 4-, 5- and higher versions faster and more effective.
At very high scale factors (5 and higher), the xBR algorithm can obliterate some small details, such as pupils in eyes, dots, and so on, so Hyllian introduced some additional calculation to compensate (5xBR-v3.5a on the left [uncompensated] vs 5xBR-v3.5b on the right [compensated]):

Of course, this compensation comes with its own drawbacks and false-positives, so which version works better varies on a game-by-game basis.
UPDATE: Hyllian has made a third variant that is even more cautious. Here's an animated GIF comparing the way each variant handles text:
Another interesting aspect of this algorithm is that it works very effectively on images already upscaled with xBR, so you can easily get absurdly large images (scaled 1x, 3x, 9x and 27x) with just a few iterations:
This puts it in direct and favorable competition with this vectorization method that recently made the rounds. xBR manages to maintain detail a bit better than the vectorizer, and it can actually operate in real-time, unlike the vectorizer.
You can download these shaders from my Mediafire repo (most are available in either XML/GLSL or Cg format, both of which are compatible with SSNES). UPDATE: KrossX ported 2xBR-v3.5a to ePSXe format and SimoneT ported 5xBR-v3.5a.
UPDATE: New Cg version of 5x variant. Runs approx. 25% faster. :)
UPDATE: new XML versions of 5xBR-v3.7. This package includes 3 variants (a, b and c), as well as the A-variant+scanlines.
UPDATE: Hyllian has been working on a new version that analyzes an image frame by frame and dynamically decides whether to apply xBR smoothing or Reverse-Anti-aliasing to produce the best picture. It handles text better than any filter/shader I've encountered, and it also excels at digitized, prerendered images and backgrounds. Here's a shot of it with Final Fantasy VI on GBA:
You can download this shader here.
UPDATE (4/19/2013): Another great update from Hyllian, this time adding 3 levels of analysis. This version runs a bit slower in my experience (unsurprisingly), but it now handles jagged edges that earlier versions simply couldn't detect, due to their 2-level analysis pattern. Compare this shot with the ones at the top of the post:
Notice that inclined bit of ground under the dragon/yoshi coin. This new version will also really help with Mega Man X games, which tended to have a lot of these sorts of gently sloping planes. You can download a Cg shader of this new version here, or a 3x scale Kega Fusion plugin here.
Closely related to xBR are the SABR shader by Joshua Street and Zenju's xBRZ CPU filter. SABR was written by Mr. Street as part of a school project and it differs from xBR in a couple of ways, including using antialiasing on edges. It was forked from Hyllian's 5xBR v3.7c shader. xBRZ is a rewrite of the xBR algorithm in C++, with some changes to the corner detection and color distance measurement. It was forked around xBR v3.5.
There is also a standalone library written in C that incorporates both the xBR algorithm (as it appears in FFmpeg's libavfilter) and Hqx. You can browse this project's source on github.
Tuesday, February 14, 2012
Nutella Chocolate Éclairs with Custard إكلير الكاسترد وشوكولاتة نوتيلا
Scroll down for English post
Try and fail, but don't fail to try, If at first you do succeed, try something harder, and if you fail try once, twice and again till you succeed. That's what I've learned from today's dish. Today's recipe is so special, it's one of the recipes that you can call challenging ease, Eclair is a french dessert made from a dough called pâte à choux, filled with custard or Crème pâtissière and covered with melt chocolate. In fact everyone tastes this dessert from my mother's hands likes it so much and no one does without asking her to make eclair every time they visit even my friends, and because I love cooking so much that was like a challenge for me, I wanted to be like my mother, I wanted to make eclairs in a perfect way, but to be honest with you, I failed at making eclair THREE times, yes three times and was so close to giving up, as the most thing that annoys me is to fail at cooking something or get a bad result not as I expected, but when I knew the secret of making eclair it became one of the easiest and quickest desserts for me to make (not like it seems to be for some people and I was one of them).
حاول وافشل ولكن لا تفشل في أن تحاول، إذا نجحت من أول محاولة حاول عمل شيء أصعب، وإذا فشلت فحاول مرة واثنين وثلاثة إلى أن تنجح ولا تيأس. هذا ما تعلمته من طبق اليوم، وصفة اليوم هي وصفة مميزة، فهي من الوصفات التي يمكن أن نقول عنها السهل الممتنع، الإكلير هي حلوى فرنسية عبارة عن نوع من المخبوزات يتم عملها بعجينة تسمى عجينة الشو ويتم حشوها بالكستر أو الكريم باتسيير وتغطى بالشوكولاتة. في الحقيقة كل من تذوق الإكلير من يدي والدتي يعجبه كثيراً ولا أحد يتذوقه منها مرة إلا ويطلبه في كل مرة يحب أن يأتي لزيارتنا حتى صديقاتي، وبما أنني أحب الطبخ فكان هذا بمثابة تحدٍ بالنسبة لي فكنت أريد أن أكون مثل أمي وأقوم بعمله على أكمل وجه، ولكن لأكون صريحة معكم لقد فشلت في عمل الإكلير ثلاث مرات، نعم ثلاث مرات وكنت قريبة جداً من اليأس منه، فأكثر شيء يضايقني هو عندما أحاول عمل أي نوع من الأطعمة وأفشل فيه أو عندما لا تكون النتيجة كما توقعت، ولكن عندما عرفت السر أصبح عمل الإكلير هو من أسهل وأسرع أنواع الحلويات بالنسبة لي (على عكس ما يبدو للبعض وأنا كنت منهم).
اعتادت والدتي عمل هذا النوع من الحلوى بدون استخدام أي أدوات كهربائية لذلك كنت أراه عملاً شاقاً لأنها تقوم بعمل كمية كبيرة وعند إضافة البيض تقوم بتقليبه مع الخليط بالملعقة الخشبية مع كل بيضة، وصدقوني هذه الطريقة تحتاج إلى عضلات قوية جداً (لن تعرفوا ما أقصد إلا إذا جربتم بأنفسكم)، وكان هذا أحد الأشياء التي تخليت عنها في عمل الإكلير ولم أجد فرق في الطعم وهو أنني أستخدم الفود بروسيسور أو الكبة أو العجان بدلاً من الملعقة الخشبية وما يساعدني في ذلك هو أنني أقوم بعمل كمية مناسبة ليست كبيرة من الإكلير على عكس أمي حيث لا تكفي أي آلة كهربائية للمقادير التي تستخدمها نظراً للعدد الذي يحب أن يأكل هذه الحلوى من يديها :). ثاني شيء ساعد على نجاح الوصفة هو اكتشاف سر النجاح في هذه الوصفة وسأضيفه لكم مع الخطوات المصورة والشرح الوافي والمفصل لعمل الإكلير بسهولة دون أي جهد أو فشل إن شاء الله.
نصيحة الوصفة:
نصيحة الوصفة:
1- أهم نصيحة لهذه الوصفة هي كمية البيض المستخدمة، لا تستخدموا الكمية الموجودة في أي وصفة تقرأونها للإكلير بدون تأكد، فحجم البيض يختلف ونوع الدقيق يختلف لذا لابد من إضافة بيضة في المرة الواحدة وبعد الخلط تأكدوا من أن قوام العجين ليس سائل وليس متماسك بشكل زائد، يكون بين هذا وذاك ويلتصق بالأيدي، لذا قوموا بالتأكد من قوام العجين المناسب قبل إضافة المزيد من البيض، هذه الوصفة أحياناً أقوم بعملها بثلاث بيضات وأحياناً أربعة مع نفس المقادير لذا عليكم التأكد.
2- إذا صَعُب عليكم تحديد قوام العجينة المناسب وكانت هذه أول مرة تقوموا بعمل الإكلير يمكن تجربة واحدة فقط بالفرن واختبارها إذا كانت جيدة أم جافة بشكل زائد أو العكس.
3- يمكن استخدام مقدار الماء أو استخدام نصفه حليب (لا أنصح باستخدام المقدار كامل من الحليب).
4- لأن العجين يلتصق بأي شيء يلامسه فالأفضل دهن كيس الحلواني المستخدم للتكشيل بالزيت من الداخل وأيضا دهن الصينية جيداً بالزيت ثم رشها بالدقيق إذا كانت قابلة للالتصاق أما إذا كانت الصينية غير قابلة للالتصاق يمكن الاكتفاء بدهنها بالزيت.
5- يمكن استخدام أي نوع من الشوكولاتة لتغطية الحلوى أنا أفضل النوتيلا كثيراً.
الوصفة تكفــي: 20 قطعة إكلير متوسطة
وقت التحضير: 15 دقيقة
وقت الخبـــــز: 27 إلى 35 دقيقة
My mother used to make this dessert without using any mixers or kitchen machines, so I used to see it as hard work because she use to make large amount and mix the eggs one at a time with a wooden spoon till it's well mixed in the dough, and believe that really needs tough muscles (you wouldn't know what I mean till you try it yourselves), and that was one thing that I gave up when making eclairs as I just use my food processor to mix the eggs in the dough, and what helps me here is that I usually make small amount not like my mother as I don't think there's any stand mixer or food processor can be enough for the amount she makes because there are many people waiting for her to finish so they eat her eclairs :). The second thing that helped me is the secret that I've discover for this dough which I'm going to write it down for you with detailed steps with step-by-step photos for making eclair without any hard work or failure God willing.
Recipe Tips:
1- The most important thing is the amount of eggs you use, never use the any amount that any recipe calls for with blind eyes, you have to make sure as the eggs are different in size and the flour is not the same for everyone, so it's the texture of the dough that tells you to stop adding eggs or to add more, as it suppose to be sticky but not runny, easy to shape with piping bag without melting and without being tough, so it's between this and that, so you add one egg at a time and mix to see, in this same recipe I sometimes use 3 and sometimes 4 eggs, so don't stick to it.
2- If it's hard for you to determine the texture of the dough, you can test one eclair in the oven to see if it's ok or tough which means it needs more egg.
3- You can use half milk half water instead of all water like the recipe here (don't recommend all milk).
4- As I said before the dough is sticky so you need to first grease the piping bag from the inside and also the baking sheet only with oil if it's non stick or with oil and flour if it's an ordinary one.
5- You can use any chocolate you like to cover the dessert, as for me I LOVE Nutella :).
Recipe serves: 20 medium eclairs approx.
Prep. Time: 15 minutes.
Baking Time: 27 to 35 minutes
Subscribe to:
Posts (Atom)
-
Oh gila betul manusia zaman sekarang. Tambah pula polis tu yang langgan pelacor?
-
UPDATE : the comparisons in this post aren't a true representation of hq2x ( more info in this post ). The xBR shots are still valid, bu...
-
Cerita ini di sampaikan oleh seorang bekas banduan tentang pengalaman beliau melihat sendiri ketua pembangkang Anwar Ibrahim di dalam penjar...


















