|
20 | 20 | },
|
21 | 21 | {
|
22 | 22 | "cell_type": "code",
|
23 |
| - "execution_count": 9, |
| 23 | + "execution_count": 1, |
24 | 24 | "metadata": {},
|
25 | 25 | "outputs": [
|
26 | 26 | {
|
|
166 | 166 | },
|
167 | 167 | {
|
168 | 168 | "cell_type": "code",
|
169 |
| - "execution_count": 8, |
| 169 | + "execution_count": 2, |
170 | 170 | "metadata": {},
|
171 | 171 | "outputs": [],
|
172 | 172 | "source": [
|
|
332 | 332 | },
|
333 | 333 | {
|
334 | 334 | "cell_type": "code",
|
335 |
| - "execution_count": 55, |
| 335 | + "execution_count": 8, |
336 | 336 | "metadata": {},
|
337 | 337 | "outputs": [],
|
338 | 338 | "source": [
|
339 | 339 | "\n",
|
340 | 340 | "def brightness(img, factor):\n",
|
341 |
| - "\tfor row in range(img.shape[0]):\n", |
342 |
| - "\t\tfor col in range(img.shape[1]):\n", |
343 |
| - "\t\t\tfor color in range(img.shape[2]):\n", |
344 |
| - "\t\t\t\timg[row, col, color] = min(img[row, col, color]*factor, 255)\n", |
345 |
| - "\treturn img\n", |
| 341 | + " with np.nditer(img, op_flags=['readwrite']) as it:\n", |
| 342 | + " for elem in it:\n", |
| 343 | + " elem[...] = min(elem*factor, 255)\n", |
| 344 | + " return img\n", |
346 | 345 | "\n",
|
347 | 346 | "img = load_image(\"cs41img.png\").copy()\n",
|
348 | 347 | "save_image(brightness(img, 1.5), \"cs41img_bright.png\")"
|
|
364 | 363 | },
|
365 | 364 | {
|
366 | 365 | "cell_type": "code",
|
367 |
| - "execution_count": 59, |
| 366 | + "execution_count": 11, |
368 | 367 | "metadata": {},
|
369 | 368 | "outputs": [],
|
370 | 369 | "source": [
|
371 | 370 | "def contrast(img, factor):\n",
|
372 |
| - "\tfor row in range(img.shape[0]):\n", |
373 |
| - "\t\tfor col in range(img.shape[1]):\n", |
374 |
| - "\t\t\tfor color in range(img.shape[2]):\n", |
375 |
| - "\t\t\t\tif img[row, col, color] < 128:\n", |
376 |
| - "\t\t\t\t\timg[row, col, color] = img[row, col, color]/factor\n", |
377 |
| - "\t\t\t\telse:\n", |
378 |
| - "\t\t\t\t\timg[row, col, color] = min(img[row, col, color]*factor, 255)\n", |
| 371 | + " with np.nditer(img, op_flags=['readwrite']) as it:\n", |
| 372 | + " for elem in it:\n", |
| 373 | + " elem[...] = min(elem*factor, 255)\n", |
| 374 | + " if elem < 128:\n", |
| 375 | + " elem[...] = elem/factor\n", |
| 376 | + " else:\n", |
| 377 | + " elem[...] = min(elem*factor, 255)\n", |
379 | 378 | "\n",
|
380 |
| - "\treturn img\n", |
| 379 | + " return img\n", |
381 | 380 | "\n",
|
382 | 381 | "img = load_image(\"cs41img.png\").copy()\n",
|
383 | 382 | "save_image(contrast(img, 1.5), \"cs41img_contrast.png\")"
|
|
413 | 412 | },
|
414 | 413 | {
|
415 | 414 | "cell_type": "code",
|
416 |
| - "execution_count": 57, |
| 415 | + "execution_count": 16, |
417 | 416 | "metadata": {},
|
418 | 417 | "outputs": [],
|
419 | 418 | "source": [
|
420 | 419 | "def reconstruct(img1, img2, img3):\n",
|
421 |
| - " reconstructed_img = np.zeros(img1.shape)\n", |
422 |
| - " for row in range(img1.shape[0]):\n", |
423 |
| - " for col in range(img1.shape[1]):\n", |
424 |
| - " for color in range(img1.shape[2]):\n", |
425 |
| - " pixel_choices = np.asarray([img1[row, col, color], img2[row, col, color], img3[row, col, color]])\n", |
426 |
| - " reconstructed_img[row, col, color] = np.argmax(np.bincount(pixel_choices))\n", |
427 |
| - "\n", |
428 |
| - " return reconstructed_img\n", |
| 420 | + " with np.nditer(img1, op_flags=['readwrite'], flags=['multi_index']) as it:\n", |
| 421 | + " for elem in it:\n", |
| 422 | + " pixel_choices = np.asarray([img1[it.multi_index], img2[it.multi_index], img3[it.multi_index]])\n", |
| 423 | + "\n", |
| 424 | + " elem[...] = np.argmax(np.bincount(pixel_choices))\n", |
| 425 | + "\n", |
| 426 | + " return img1\n", |
429 | 427 | "\n",
|
430 | 428 | "img1 = load_image(\"SOLcs41img_unicorn1.png\").copy()\n",
|
431 | 429 | "img2 = load_image(\"SOLcs41img_unicorn2.png\").copy()\n",
|
|
0 commit comments