Function Repository Resource:

ImageRadialDivide

Source Notebook

Divide an image into a list of colored polygons centered around the origin

Contributed by: Erik Mahieu

ResourceFunction["ImageRadialDivide"][img]

divides the image img into polygons centered around the origin.

Details and Options

An image of width w is divided into w/2 rings of w polygons each, resulting in w2/2 colored polygons.
Both face and edge colors are taken to be the color of the pixel closest to the centroid of the polygon in the image.
The result is a disk-shaped image where pixels outside of the disk region are discarded.
ResourceFunction["ImageRadialDivide"] is very important for transformations of an image that operate inhomogeneously, that is, differently on different parts of the image. This is the case with anamorphic transformations where the deformation of the original is dependent on the locations of each pixel.

Examples

Basic Examples (1) 

Radially divide an image into a list of colored polygons:

In[1]:=
Graphics[ResourceFunction["ImageRadialDivide"][mandrill]]
Out[1]=

Scope (2) 

The output of the function is a list of colored polygons:

In[2]:=
ird = ResourceFunction["ImageRadialDivide"][mandrill];
In[3]:=
Short[isd, 2]
Out[3]=
In[4]:=
Dimensions[ird]
Out[4]=

The function operates best on circular images such as logos and the like:

In[5]:=
wolf = ImageResize[\!\(\* GraphicsBox[ TagBox[RasterBox[CompressedData[" 1:eJztXQeUFFXWVnKaDpPzDAxRFBiQDAMIEgRJgyxIEBQZyRkcEQQlOT+ISgYR WSQHEYYkYde0gKgIrLC7YgBUQDAjZt//vjo2W139XoWuV13ds/Wd83mOQ3d1 vVe33rv3vhsq3j+q++BiN91007gy9D/dB05qNXbswPxcD/2fe0aOG5I38sFB HUaOfzDvwbGN7i9O/1jwJ0tQEgcOHDhw4MCBAwcOHDhw4MCBAwcOKD777DOy d+9esmDBAjJu3DiSm5tLGjduTKpVq0ZiY2NJ6dKlCdxJcpYqVYrExMSQKlWq kEaNGpGuXbuSUaNGkfnz55PCwkJy7tw5u4flwAR++OEHsm/fPvLYY4+Rtm3b Eq/XGyADouhyuUirVq1Ifn4+2bVrF/n222/tHr4DFZw9e5YUFBRIzwzrgFVy ocXixYuT5s2bk8cff5ycPHnS7mlxQHHhwgUyY8YMUrt2bdvkQovY16ZMmSLJ sYPQ4ffffyfbtm0j7du3J8WKFbNdDoywZcuWZO3ateTnn3+2exqLLL7//ntJ f6xYsaLtz9ssk5OTyaxZs8jXX39t97QWGUA+Zs+eLdkdZp9PubJlSfXUdNIy M4v0SMskQxNTyJSYOLLA4yGr3RVIoas02S3jX+nfFtJ/mxYTS4YlJJN76Hda 0e/WTMsg5cuVM30/brdb0rUdeQkev/76K1m8eLFkswb7HLKSU0iH9EwyPjaB 7HCVIR94byYfem8Sxr2uUiSfylknKj+Qv5tvvjloeYEO/tNPP9k97RGF/fv3 k1tuucXwfMMH0iSzEhkTl0j+7iouVCb08LC7BJlE5aY5vYdg1hvsqS+99JLd 0x/2+OKLL0jfvn0NzS3e4bp0zZgYG09OeIppPssJ9DmudEVZLjNnKB/zxpCG 9N5gKxsZU+fOncn58+ftfhxhiU2bNpHo6Gj9a3VUFOmWmkH2UD1C77O7LyFF +m5Xuk+Ecp35m6sE6ZWSTmI8+v19UXR8zz33nN2PJWwA/2X//v11z1+cN5oM pjrlSY8xXaNHYsqNa6TGJ4R8TwL/5S1GRtI9MSU+Xvd4u3TpQq5cuWL3Y7IV 8FdWrlxZ13xFuz3kASof/zQoH2Bf+j3l9da5ytkiK+B/qD49murWiTH6dPSU lBRy+PBhux+XLXjxxRdJOR26XsmSJUlXumYfcwenl46gz4N1XewDdsmJj5D5 XkmppGyZMrrmYeHChXY/tpDhjz/+II8++qiu96hWWgbZ6g7+vS+g+kCJEiWY 165MbWa75cTHvdRmb0DHqmdOhg4dSn777Te7H6OlgL+6d+/emnMBf9jwuARy 1oS/YxfVb6Hrqv0OfCp2y4icD3tjNe8Z7Nixo3QmXhSBceFMRmsOqqekkZfd ZU3NN2zSavQ6AWsI1YVq1qx54//7JaeZfraH3dq2uBEeoPKdrWNtQTzMN998 Y/djFQqMB2dgmu8J1RlgE5id6870Oqx38JdffpHOEH1/q5piTk6mRceQRukZ wtcV+I17UvtMy79bt25dyedUFIB1REtG4EedEB0rZI7nu90B1+/evbt0zgx8 9dVXQvYeyAh0H7OypsYZ3mhSoXx51bnLzs6O+HUF+ki7du1Ux+ml9u4S+mxF zOv71H5IS0j0uz5iG30y4kNmZqapvccnI/h+LH2WVskJuJ7a70mxcapz2LBh w4jVV2DXaOmsqQkJZIdJXUTO3GR/nQT+3evXrwfc26JFi258Jsug3SOXERA+ eSvlBPybqySplBToA5IT72Mk2kGTJ09WHVdGYhJ5RaC9Ab+Z0gY+deoU895w diL/nF7bWykjPuo5VzJLnDFWZ+jmcj700EMhfsrmAB+aloy8HqTfjMfaChth 4sSJ3PvDWldetu/r8bnxZATcaeCMyQzha9SSlaeffjqETzp4nDhxgpQtW1Z1 rxG5joBPeP3PDytUqKAZWzh27Ngbn8eaHqyMgM+5XSGRE/AolRW1PQj3+dpr r4XoaQcHnOllZWWp6qwi9REQZyUVFfOmJ4bjyJEjft/h2T351A5TkxFwJpWj UMkJiNiaZBXdNjExkVy6dCkETzw4qMWOwPYVZdfIOSLO375B7KnSvmHhxx9/ 9Pte/6RAuwexKqxY7bRE/98cHxf68+eN7vKqNnOHDh2k/TXcsGHDBtV3TpR/ RE745JRnrkbiwerVq3fjezVS/XWUIVT+WDJSNT2D/Ivqx/K/PZhoz1nRHI9X NecAdl044fLly6oxRh0tOpsdqTgLxpplxDZ84YUXbnwXvs9DUSWl67LiEMBb K1chX1+5Ivkq5H+/JzXTFjkB/yKLq1ESeuKHH35o4ZM3BjU/CfTzfwuOXwbh 24bdJP8to7r+p59+6vf9PCofnZNSmePIrlpNkhEf/N6DjEq2yQnOSuupnAch bzYcgNxu3j3i3NfsmR6Pk6MDY3yQw2EE2L/lMTC8OJDba9xCflBcW77et87M sk1OQPjhPK7A8wofkVtmJ5A7Ub16de79DY21Tr9Tngf36NEjqDGMGDFCVa/K qVM3QEaAKGp7+z7TrKK9cgJO8fLzmxAPZ6dfHzUiePeGGCMz8SNqXOEK1PPf e++9oMZw9OhR7hhaZdfl+mHkclI/0759R84m6ZncsSCfzA5gjefl6CFGb4uJ ODQt3pHunzvq8XiCtgGRW8UaQ6fGTVV1Yrmc1KL3Y7eMgAddpbl5Q9hfP//8 82Afd9BALidPdrtaGHt6xF08oKbNM888Y2osOG+VX697TgtNu0kuJ5VTUm2X ER8HJPDtH9T4CSXU1hLExQcb86yHAxMD7ZGrV6+aGg/0PPn1/lG4S/M74Son iOVLjmP7astQPT2Ua8q8efO4MovcCSvnIVNhC9evX9/0eODjll9z8oD7Nb8j 94XCh263fMg5iWEL+vjII4+Yni89gI2TkcG21xGzE0x+jV6uZuivqK8lAqif 5btm63rasie/h3CTE/iWlO/TjfU+Ojokts/mzZu5sjooPsnS8aMugPz3cD6H mFcRkOeKJNJ1Ww04P5LfhzsqdOfFuteUGP454ZIlS4TMmRrg32P9NvIJjOZy GiHOhZX5uSLX0NOnT/td++L5C9zPol6J/LNRdA+yWy5Y85XEyTdE/LWV+OST T7gx4MgJt3LcM7yB50cXL14UNjasEbDnfdfevnQZ97Nffvll2MsJeB9D5/cx WH+THjzxxBPM34Ts7LYwpgv5crEKOUF8tGgMHz5cly57VnFeHK5yAh+CXPbl HDlypPD58+HWW29l/mZ2eqZlY33PU4wZv3X8+HHh43vnnXf+O6aq1chXly8z P3fqjTciQk7AnAx2PbukpCRdcTpGcebMGe4ahho1VowRfv8mjLNQ5PRZAfjW 5Od7CdSO2bJoccDn/rFjZ8TISYFKzZU3qLyLBs//Ct+oVfHm9yti1XzkxdGL wMaNGwN+r3frNuRHWX7H7lUvRIycQJ+F75M1j+PHjxc+f7ycviYWnYE976oQ sLdCD0Icg9XYuXNnwDirZmSS04ePSP++tmCu37/B1rNbHtTYJr0S89nddttt QucNfnqePjTKAp/JKUZeH2QEsc+hAvx3yrHCB7t54UKyfOo0v7+Hm59Nycej +TEH6A8hCnv27OH+zqGoEsLH1T41UCfBPYQa2L+VfgDoL81q1fH7W6ZGXofd hF+LlzOAXCtRQH121m9UsqDWzFOMvRS+UrsAG0irXmM4nQPyWJsTmzJkyBBh c9WmTRvmb7TPEBt3gTxyZY07xMtZYb8ZwUcffSTljvHkpI6N8bF6iVhv5r3X qSNsnhAHxPqNcYLzVu5JDsyJtCO2hgXUGeHVxkYu+38sit0TxZkcHQVrpYi+ DOhdwnuPtgvM/9zuLhegK0+fPl3AExYH6PO8+pQt0jKF1Pixisg35T1HET5L ng5bpnRpoe9QQ4U/Def8os6CRQLvHvowseakPh2DlWehZhnPOCMD16xZY3pe EFPIurbIOkLzGD7Dl19+WcBTtQbQlwYOHMiel+RUKU/CbplgsR7Hhw87xSzG jBnDvHaOoFwExNRkKc5v4uLibNdd9eDJJ59kzg3qH6FPi91yoWQHjpz069fP 9Fx069aNee1ugmLMhzN88/CHRgqw7rFiLRCLmm9BTrUZ3pccWN8QxD5qFqg/ ybr2EAG51zgXSlDo4aj/HwlriRzvv/++X90dOe+mNly42EIPc2pzV61a1fQc 4Bqsa+cL8FX3iglcS1asWCHgyYUeqLmInpGsuUKtp3DQWeZzzo6RO2EWvPyL p+hvmrnnd1zFAuIY4RNHXZJIBWLMe/bsyX4WdKz/Z3LOzBK1I1n3BpqtlcLr BWxWT+sZFxh7FA516Ao3byErFywkqxYtJnu2biMfnT5DfjdYR3Hu3LnMOYMe k5uUats+hJhDnpyY7VHIu+4GV/B1CI5TvSSGcY5jtFYH3gGRPV6/+PQz5lhR R2Ta5Mnk4rlzuq+FM0TeO1YzNYPss6G2/rsefk0dq+TETDxsn+hAvQS98fQC ei5sokGDBgmtLbVm+XLueH0clpdHvtc5p6h9zYsVRcwK+sKFUk6Oq8iJ2fMR 0XJy2luMWV8ZcWRagEwgTgn+FciVaH9t69atNeUERAzfzo2bdF0TsZTohcK7 1p2p6VIMcFGVk7VB9sMa4mHnH2nVuEHfeV+tFezzOHcSjcJNm8mWv64hc6ZN J3WzszXlpW/v3uT6tWu6rr1jxw5ufAJisla4rY+Js3LfEanHIi66YkJgPiPi FnjA+4iawfLPhyKfDbh0/gKZP3s2s+9Ys6ZNyeqly8ilc/r7gqKOHa/fLmSo l8U6rpV6LM8ufiYIG296FPsc6uDBg8zfxv6unFc7fPpYM+bPmUNGDxtGXtu7 j1z/zlh9Lzlw71OnTuU+rxoC+g/xaKVdzPOzPRxETa36nFgZVq8CxHuwYoOg l6xcuVLKTQzH+qh6gXw8N6MHDAiff15covB6VE9Z6GdD3h3r2nlJxmL91rmi mDGaiONXAnsN8pC09APUXYb+G6n95nHfaj15a1Mdd69A+9lKvz3vHDDXYK/o 9knsMyjod0qg7gJ8VfI+OWqE/OHzIn0pocSxY8e49XdRR2u4oLhB3jlgixYt TI+BF1fQ1EDezmE3v24lauKrAecmW7ZskXLsteSlSpUqEXeG6AN8/si74o2t blqG6bXFyrgCXpxSFQMx5v2j2eud0Twj6CxzqD7Juhb2ei2ZiwR88MEH0ryo rS3B6i1Wxinx4h5Rk1ePDYcxZcaz8z+DqX/Luh/sO1b4U+wC9PNdu3Zx9Vz0 Iy0Mws9pZdyjsra3nBt1nPE8WYFfJ/mKrA64HsBnyKr7b0U+dTgA+jxqsbPm DrW+Ub9Kr79FLY5aVC0UXl7GGGq7ad1f00R2/ynobUaAd0zee9hHu+rnhhIP PPAA9xmjf8B6Hb5xq/MygDvvvJP5Gx008rxedZWS5J71XfQPNAKsjcprIC4o UvVWI1D20lXSE+XSjPPvwcjFlfaw7Gxh98nLG0W/CrV76+Nl668g8jH1AvLO Oj9Ant7/CnjxT+BEHXG4ocgbVeuJwctDh/6axeljAxpZ65YtW2bp+CIB7777 LnMeW+moi4c4ZF4eusheGteuXePWtRjN0VHmRrF1GhB1wvUCeglL7y8KNrAR 4L1ired6YhJCVdcCaNWqFfN3GnBqs+Uk8Punrl69WvfvvvXWWwHfz8vLk/4N 9gD2btQEO3DggKTDFBQUSLqPj6idvXjxYrJ9+3by9ttvk48//lg6Gw3HXEM1 TJo0yW8OsA/rje1onc72m4iukwPw/FusultH3aWIq0IUV06M+Dqwvyi/j34y avUDjDA1NZW0b9+ejB49Wuqnh3ME6E7nzp2TfMHhIE+FhYUB9z1Mh60Jopca YudYY58wYYLwe1Wr4zdeUcdvsItfCxnvgd5zXnxO2RvDDsJnk5aWRjp27Cj1 PV66dKn07KAzoLc65Al+dyuAd0rpM2qapr9W7xyV/k2HDx+25J711gWtxemx B9577726f0/NxxeOhC8Ctf87d+4sndUsX76c7N69W6oHgOf93XffGZIn5Kgk JPjbjNBJjhuIk2zO8dVD7q2Ky1CrM7zrTz/y5qjyqvWHjOSXq9lZLGLtgU8Q hExj/wXhZ/H9naePh5KwPRBH0717d0nvQG4bxgq/KPRKxIBCb73jjjv8vgdf lJE8B7vqDGPP5tUt7/pnnEGXGPW4ESN9upHnDVsH+gPWe7n+4NNH8c5BnzXy buDziI3CueKJEyekMyP0PYaNiF61OPscNmyY7fKk5FSDfdf721S3HGjXrh3z d9G36G033cfj+L41I7oJYHe8Wk5Oju2y4eNfDMaF4dxHmbvtI/p7W42tW7dy x9KAkS8spxHdJByg7N+kZDrV3+e6PWQCtT36paSTuzIqkcaZWaR6anpATqwZ tk4x3pNzgkpfFfgtrQbWbL1xZkrirDzSgNpfamNqq1K3ATbpK65SZCHViybG JpD7qCyhJ3aTilmkBrVZ0J+Nd/7lW3/bUpkzGoOv1qcJsbCseGQrMH/+/KDk BPpApAH2Ce+83MdhXnO1GyBPr7uKS3kTIGJL9keVCrrem1rfN6Pnr2ag1kdS 7d2wW98IFocOHVIdG2rVLXG5TcmKKKK2Kq+PJPKkRfYs0gO1vrQs9u7dO6T3 JxpKG1VJ6IwH6R5jt5z0S+T3pYUNHmpgTeHVU2URsdCRDOyZPJ+AjzWT08gZ G2uD7neV8euDKifqPRmNHxQF+DP0ygl8q5GOmTNnao6zTYL4Wu562ZgTYwLa WYsXOh4vX1ZOnE8UhbgzjJeXZyNnnkm9Nhg+oqK74tw0VDYOD6z+I0qiR2lR wauvvqo5XpwfPBtCvfYQtY88sv7LSq5fv97uaZPQp08f1XlbtWqV3bcoFFo6 rU+v3RcCvRa+krqM3ng+wn8eLoCOp7YeI9aoKEGPTgvWSE6ldqq1em0vlbN5 1OPAOVg4YdOmTdz7RT7nbwZr4YU79Oi0YEsBdXZ5nOmNVpXXUNWJMQq13PvB gwfbfXtCoVenBQdFi+0/AyJnh2cDg4ipCle/JmKbsXbw7h3n9UUJenRaEL7o eVEuYTKCmsWsGnc+JicnS7WbwhnoGcuqU+Xjhg0b7L5FodCj04JxdI/YHWW+ Z/wb7uLMvt8+Ii7pzTfftHtadGHdunWqc2ZHT0iroFenBatRnfOfJvTaY1RG kCeq9hsLFiywe0oMQa0GGYj4saICXi4CizkJwfWcfJ3KSDUNGUH90UgDdCgt v8qzzz5r920KAWw5I2ddAwz6a19xlZF6u6pd86677opYmxKxwNC71cY3bty4 sNXLjQA6gV45gQ5R4PLokpE11K5JjFGXwaZNm0q1yiIZuH9eLuGNtTgnJ6L7 ZPiA8wm9shLr8ZKdrvKqMoJ8z/IqNgF4++23S/lDRQF6ZAV1YcPNd2gUOLfX q9OCVRJTyElP8QD5QJxjD6rzal2rQYMGERkjqAbISqdOnVTHjXlBLnAk70O8 noE8Nkv078d5wFWa1FI5r7nxvWbNisw6ogT0lb59+2rOQZMmTSJ2DozqtCDq xEBGRscmSPktWp+/++67I14f0QLWCtTK0poL5Mw9//zzEbm2GNFpfWOtpWHz +jh8+PCItWuCAXxxan5bH9F//PTp03bfrmEY0Wn1EDZSuJ7rWQ34+NXOg+RE HPbVq1ftvmXdMKrTqhG1N44cOWL3kGwFcvgHDBige87gc0RtnEiAUZ2WRdSN j6T3w2ogHt9IThB8veFexy8YndZH9HFGXxAHgYAvALXWjcwn6lcgHzUc6h6x EMya0qVLlyJVX9sq7N+/n1uTh0fE9GONwT5up8wgrwC9gVAnzmjOJGqiFKXz 0VAA8WLwucVxciC1CHsDsS54L63MCYHdjpgg1LnBWhhMHR7UeIFcRWpfmHAA 8g6Ro2r03VSuNTgHQUwr1ir0SYb+bMQPgc8iXg9rBa6B/QT9SdVqR+mRD/iS zPbmc/BfQF4QN4m1OdjnwiJ8XLA7a9WqRTp06OBH9PyJj4/n9tIMlohLnDVr liMfFgJ7yLZt26RaXKzeGeFM9LiDfzFcde6iCugeM2bMIHXq1LFdBnhEDUH0 B0D/ZQf2A88BuiDiF0TvE0YIfaV58+ZSbcyTJ0/aPS0OVICzVOQ9Q0eE3eP1 iquVpqTL5ZJkMz8/X/Lj/K/V3S9qQF1W2K6IR0esZW5urtRzFz1Z4TNl1b2G jQs7C2dQjRo1Il27diWjRo2S6o6hHjXqpDpw4MCBAwcOHDhw4MCBAwcOHDhw APw/D1prWQ== "], {{0, 138.}, {138., 0}}, {0, 255}, ColorFunction->RGBColor], BoxForm`ImageTag[ "Byte", ColorSpace -> "RGB", Interleaving -> True, MetaInformation -> <|"XMP" -> <|"BasicSchema" -> <|"CreatorTool" -> "Adobe Photoshop CC 2015.5 (Macintosh)"|>, "MediaManagementSchema" -> <|"DerivedFrom" -> <|"DerivedFrom" -> <|"InstanceID" -> "xmp.iid:724B5939489A11E6B11CEF5EF1A2CCEF", "DocumentID" -> "xmp.did:724B593A489A11E6B11CEF5EF1A2CCEF"|>|>, "DocumentID" -> "xmp.did:724B593C489A11E6B11CEF5EF1A2CCEF", "InstanceID" -> "xmp.iid:724B593B489A11E6B11CEF5EF1A2CCEF"|>, "RightsManagementSchema" -> <|"DerivedFrom" -> <|"DerivedFrom" -> <|"InstanceID" -> "xmp.iid:724B5939489A11E6B11CEF5EF1A2CCEF", "DocumentID" -> "xmp.did:724B593A489A11E6B11CEF5EF1A2CCEF"|>|>|>, "PagedTextSchema" -> <|"DerivedFrom" -> <|"DerivedFrom" -> <|"InstanceID" -> "xmp.iid:724B5939489A11E6B11CEF5EF1A2CCEF", "DocumentID" -> "xmp.did:724B593A489A11E6B11CEF5EF1A2CCEF"|>|>|>|>|>], Selectable->False], DefaultBaseStyle->"ImageGraphics", ImageSizeRaw->{138., 138.}, PlotRange->{{0, 138.}, {0, 138.}}]\), 50];
In[6]:=
Graphics[ResourceFunction["ImageRadialDivide"][wolf]]
Out[6]=

Neat Examples (1) 

Here is an example of a conical mirror anamorphic function operating on the vertices of an image that was divided into squares:

In[7]:=
ana[{yi_, zi_}, \[Phi]_] := Re /@ {yi (3 - 2 yi^2 + 2 Sqrt[1 - yi^2] zi Cot[\[Phi]]), 2 (1 - yi^2)^(3/2) + (zi - 2 yi^2 zi) Cot[\[Phi]]}
In[8]:=
Graphics[MapAt[ana[#, 50 \[Degree]] &, ResourceFunction["ImageRadialDivide"][mandrill], {All, -1, -1, All}]]
Out[8]=

Publisher

Erik Mahieu

Version History

  • 1.0.0 – 09 November 2020

Related Resources

License Information