ساخت تصویر برفکی با متلب
میدانید که تلوزیونهای قدیمی زمانی که تلوزیون به آنتن وصل نشود یا مشکلی در آنتن آن ایجاد شود، صفحاتی با نقاط سفید و خاکستری و سیاه به صورت تصادفی را در تصویر مشاهده میکنید.
پیشنهاد نویسنده: الگوریتم برش ساترلند هاگمن
ساخت تصویر برفکی با متلب
برای ساخت تصویر برفکی به صورت رندوم باید از کد زیر استفاده کنید:
clc;
clear all;
numbers = [0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 255];
numbersSize = size(numbers);
x = 1000;
y = 1000;
imageResult = zeros(x, y);
for i = 1 : x
for j = 1 : y
tempIndex = (numbersSize - 2).* rand(1) + 1;
imageResult(i, j) = numbers( round(tempIndex(2)) );
if(imageResult(i, j) > 255)
imageResult(i, j) = 255;
end
end
end
image = uint8(imageResult);
figure, imshow(image);
نکته: خروجی یک تصویر grayscale (خاکستری) است.
توضیحات
ابتدا با x و y سایز پیکسلهای تصویر را مشخص میکنیم. سپس به علت دوبعدی بودن فضای یک تصویر با یک حلقهی تو در تو تصویر را پیمایش میکنیم. در مرحلهی بعد یک عدد تصادفی را به عنوان index برای ماتریس رنگها بدست میآوریم. مقدار تصادفی را برای آن پیکسل در نظر میگیریم تا پیکسلها به پایان برسند. در مرحلهی بعد ماتریس تصویر را که به صورت double است به unit8 تبدیل میکنیم تا به صورت یک تصویر با تابع imshow قابل نمایش شود.
اگر نیاز به یادگیری نرمافزار متلب را دارید این لینک را دنبال کنید. در صورتی که روشهای بهتری برای تمرین بالا در اختیار دارید برای ما ارسال کنید.


















استفاده از gpuArray یا parfor در این سناریو سرعت رو محسوس زیاد میکنه؟
بله، چون در کد فعلی دوبار حلقهی تو در تو روی x و y اجرا میشه (۱e6 تکرار برای 1000×1000).
آیا ثبات دانهها با تعیین rng آزمون شده؟
نه، در این کد هیچ کنترلی روی seed تصادفی (rng) نشده.
بهتر نیست از randi([0,255],x,y,’uint8′) مستقیم استفاده بشه؟
بله اتفاقا بهینهتر هم میشه مرسی از پیشنهادتون.
خروجی این روش با نویز سفید گوسی چه تفاوتی داره؟
خروجی کد تو نویز یکنواخت (Uniform noise) هست: همهی مقادیر بین ۰ تا ۲۵۵ با احتمال تقریباً برابر انتخاب میشن. نویز سفید گوسی (Gaussian white noise) توزیع نرمال داره (یعنی بیشتر پیکسلها نزدیک به میانگین هستن و مقادیر خیلی زیاد یا خیلی کم کمتر دیده میشه). پس تصویری که داری میسازی از نظر آماری با نویز گوسی فرق داره.
دلیل انتخاب گامهای ۱۰ واحدی در آرایهی مقادیر چیه؟
در numbers فقط مضارب ۱۰ + مقدار ۲۵۵ تعریف شده. این باعث میشه خروجی فقط از همین مقادیر تشکیل بشه (مثل دانهدانه یا پلهای شدن تصویر). احتمالاً هدف نویسنده این بوده که تصویر خیلی رندم و پیوسته نباشه، بلکه حالت quantized noise (نویز پلهای) داشته باشه.