بلوک بندی تصویر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

بلوک بندی تصویر

0 امتیاز

سلام . من یه تصویر دارم و میخام اونو به بلوک های همپوشان تقسیم کنم. بلوک بندی رو انجام دادم منتهی بعد از اینکه از هر بلوک dct گرفتم میخام ، بلوک ها رو تبدیل به ماتریس کنم تا بتونم تصویر بازسازی حاصل رو ببینم. میشه راهنمایی کنید و کد متلب اش رو بگین. با تشکر

برای بلوک بندی از کد پایین استفاده کردم:

[row col]=size(img);
 for i=1:row-7
    for j=1:col-7
        BLOCK=img(i:i+7,j:j+7);
         imshow(BLOCK);
    end
 end
 
سوال شده تیر 28, 1399  بوسیله ی Artur (امتیاز 34)   2 13 15
ویرایش شده تیر 28, 1399 بوسیله ی مصطفی ساتکی

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

ابتدا برای هر بلوک به صورت زیر dct بگیرید:

I = imread('lenagray.jpg');
  I = im2double(I);
  T = dctmtx(8);
  dct = @(block_struct) T * block_struct.data * T';
  B = blockproc(I,[8 8],dct);
  figure;
  imagesc(B)

سپس هر بلوک را reconstrcut کنید

invdct = @(block_struct) T' * block_struct.data * T;
I2 = blockproc(B,[8 8],invdct);

 

پاسخ داده شده تیر 29, 1399 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد تیر 29, 1399 بوسیله ی Artur
خیلی ممنون. من کدرو وارد کردم منتهی ارر میده. عملگرها ی ضربدر درستن؟
ارر:
BLOCKPROC encountered an error while evaluating the user-supplied function handle, FUN.

The cause of the error was:

Error using  *
Arguments must be 2-D, or at least one argument must be scalar. Use TIMES (.*) for elementwise multiplication.

Error in Untitled>@(block_struct)T*block_struct.data*T'

Error in blockprocFunDispatcher (line 13)
        output_block = fun(block_struct);

Error in blockprocInMemory (line 80)
[ul_output fun_nargout] = blockprocFunDispatcher(fun,block_struct,...

Error in blockproc (line 243)
    result_image = blockprocInMemory(source,fun,options);

Error in Untitled (line 11)
  B = blockproc(I,[8 8],dct);
تصویر ورودی باید تک کاناله باشه اگر نیست با دستور زیر تک کاناله اش کنید
grayImage = rgb2gray(I);
...