نمایش نتایج 1 تا 13 از 13

نام تاپیک: i-frame

  1. #1

    Red face i-frame

    سلام.من دارم روی پروژه i-frame کار میکنم که درواقع هم روی خود کد و هم بهینه سازی کد مشکل دارم.اگر کسی بتونه کمکم کنه واقعا ممنون میشم.
    این i-frame شامل مراحل زیر است:
    1.خواندن یک تصویر رنگی و تبدیل به grayscale
    2.شکستن تصویر grayscale به بلوکهای 8*8
    3.تبدیل dct روی بلوکها
    4.کوانتایز کردن ضرایب dct طبق جول کوانتایزسیون استاندارد با ضریب q=1
    5.کوانتایز معکوس
    6.تبدیل dct معکوس
    7.تشکیل تصویر grayscale
    8.نمایش تصویر grayscale اولیه به دست آمده
    9.محاسبه MSE بین تصویر grayscale به دست آمده و اولیه
    code:
    close all
    clear all
    I=imread ('cameraman.tif');
    J=rgb2gray(I);
    I2=blkproc(J,[8 8],dct2);
    Q=1;
    F1=Q*round(I2,Q);
    F1(1,1)=F(1,1);
    G=idct2(F1);
    figure;
    subplot(2,2,1),imshow(J);
    subplot(2,2,2),imshow(G,[0,255]);
    subplot(2,2,3),imhist(J);
    subplot(2,2,4),imhist(G);

  2. #2

    نقل قول: i-frame


    close all
    clear all
    img = imread ('cameraman.tif');
    grayImg =double(rgb2gray(img));
    DC = blkproc(grayImg, [8 8], @dct2);
    zarib = 1;
    Quantization_Matrix=...
    [ 16 11 10 16 24 40 51 61;
    12 12 14 19 26 58 60 55;
    14 13 16 24 40 57 69 56;
    14 17 22 29 51 87 80 62;
    18 22 37 56 68 109 103 77;
    24 35 55 64 81 104 113 92;
    49 64 78 87 103 121 120 101;
    72 92 95 98 112 100 103 99 ];
    if zarib < 50
    Quantization_Matrix = Quantization_Matrix * 50 / zarib ;
    else
    Quantization_Matrix = Quantization_Matrix * (100 - zarib) / 50;
    end
    Quantization_Matrix = double(uint8((Quantization_Matrix - .2) / 254.8 * 254 + 1));
    quantized_DC = round(blkproc(DC, [8 8], @(x, y) x ./ y , Quantization_Matrix));
    reconstructed_DC = blkproc(quantized_DC, [8 8], @(x, y) x .* y , Quantization_Matrix);
    compressed_image = round(blkproc(reconstructed_DC, [8 8], @idct2));
    mse =sum(( grayImg(:) - compressed_image(:)) .^ 2) / numel(grayImg);
    printf("MSE = %f\n", mse)
    figure;
    subplot(2,2,1),imshow(grayImg,[0,255]);
    subplot(2,2,2),imshow(compressed_image,[0,255]);
    subplot(2,2,3),imhist(grayImg);
    subplot(2,2,4),imhist(compressed_image);

  3. #3

    نقل قول: i-frame

    سلام ببخشید اما میشه راجع به کدتون توضیح بدین چون من تازه شروع کردم خیلی درک بالایی از کدهاتون ندارم.ممنون

  4. #4

    نقل قول: i-frame

    سلام میشه قسمت های زیر رو توضیح بدید؟
    if zarib < 50
    Quantization_Matrix = Quantization_Matrix * 50 / zarib ;
    else
    Quantization_Matrix = Quantization_Matrix * (100 - zarib) / 50;
    end
    Quantization_Matrix = double(uint8((Quantization_Matrix - .2) / 254.8 * 254 + 1));
    quantized_DC = round(blkproc(DC, [8 8], @(x, y) x ./ y , Quantization_Matrix));
    reconstructed_DC = blkproc(quantized_DC, [8 8], @(x, y) x .* y , Quantization_Matrix);
    compressed_image = round(blkproc(reconstructed_DC, [8 8], @idct2));
    mse =sum(( grayImg(:) - compressed_image(:)) .^ 2) / numel(grayImg);

  5. #5

    نقل قول: i-frame

    این pdf را بخونید داخلش توضیحات خوبی ارائه داده
    http://www.lokminglui.com/dct.pdf
    اون عبارت = quantized_DC یعنی DC / Quantization_Matrix
    و عبارت = reconstructed_DC هم یعنی quantized_DC * Quantization_Matrix البته به صورت خانه های 8*8
    اون = compressed_image هم که تبدیل معکوس dct هست
    mse که MSE را به دست میاره!

  6. #6

    نقل قول: i-frame

    ممنون.یک سوال دیگه هم دارم چرا وقتی تصویر رنگی رو به خاکستری تبدیل کردید با عنوان داده ای double در grayImg ذخیره کردید؟

  7. #7

    نقل قول: i-frame

    سلام
    بهتره برای انجلم محاسبات ابتدا تصویر را از نوع unit8 به double تبدیل کنیم چون محدوده اعدادی که در uint8 جا می گیره بین 0 تا 255 هست که ما در محاسباتمون به عدد اعشار نیاز داریم مثل محاسبه mse یا فکر کنم یه جای دیگه

  8. #8

    نقل قول: i-frame

    سلام.اگر من بخوام برای ضرایب کوانتایز متفاوت mse و تصویر فشرده شده ام رو ببینم یک راهش اینه که برای تک تک ضرایب کوانتایز این کار رو انجام بدم که بهینه نیست و یکیشم اینه که یک functionتعریف کنم.
    من میدونم چطور function را با یک ورودی و یک خروجی تنظیم کنم اما چطور یک ورودی (ضریب کوانتایز) بدم و دو خروجی (mseو تصویر کوانتایزشده)بخوام.
    فرم تعریف functionرو ممنون میشم برام بگید.

  9. #9

    نقل قول: i-frame

    سلام، به این صورت می تونید بنویسید البته می تونید از printf به بعد را از داخل تابع حذف کنید

    function [mse compressed_image] = iframe(img, zarib)
    grayImg =double(rgb2gray(img));
    DC = blkproc(grayImg, [8 8], @dct2);
    Quantization_Matrix=...
    [ 16 11 10 16 24 40 51 61;
    12 12 14 19 26 58 60 55;
    14 13 16 24 40 57 69 56;
    14 17 22 29 51 87 80 62;
    18 22 37 56 68 109 103 77;
    24 35 55 64 81 104 113 92;
    49 64 78 87 103 121 120 101;
    72 92 95 98 112 100 103 99 ];
    if zarib < 50
    Quantization_Matrix = Quantization_Matrix * 50 / zarib ;
    else
    Quantization_Matrix = Quantization_Matrix * (100 - zarib) / 50;
    end
    Quantization_Matrix = double(uint8((Quantization_Matrix - .2) / 254.8 * 254 + 1));
    quantized_DC = round(blkproc(DC, [8 8], @(x, y) x ./ y , Quantization_Matrix));
    reconstructed_DC = blkproc(quantized_DC, [8 8], @(x, y) x .* y , Quantization_Matrix);
    compressed_image = round(blkproc(reconstructed_DC, [8 8], @idct2));
    mse =sum(( grayImg(:) - compressed_image(:)) .^ 2) / numel(grayImg);
    printf("MSE = %f\n", mse)
    figure;
    subplot(2,2,1),imshow(grayImg,[0,255]);
    subplot(2,2,2),imshow(compressed_image,[0,255]);
    subplot(2,2,3),imhist(grayImg);
    subplot(2,2,4),imhist(compressed_image);
    end

    این هم نحوه استفاده

    img = imread ('cameraman.tif');
    [mse compressed_image] = iframe(img, 1);

  10. #10

    نقل قول: i-frame

    یعنی اون mse ای که در کنار compressed_image آوردین هم mse رو میده و هم تصویر compressed_imageرو؟!!!
    نباید برای برگرداندن این دومقدار دستور imshow رو بیاریم؟

  11. #11

    نقل قول: i-frame

    هر کدم از mse و یا compressed_image را جداگانه می تونیم استفاده کنیم
    مثلا mse را چاپ کنیم یا یا compressed_image را imshow کنیم

  12. #12

    نقل قول: i-frame

    این اروری که در زمان اجرای برنامه متلب بهم میده چیه؟
    ??? Error using ==> rgb2gray>parse_inputs at 82MAP must be a m x 3 array.


    Error in ==> rgb2gray at 35
    X = parse_inputs(varargin{:});

  13. #13

    نقل قول: i-frame

    rgb2gray را بردارید . احتمالا وقتی تصویر سیاه و سفید باشه ایراد می گیره

تاپیک های مشابه

  1. استفاده از Frame در دلفی 7
    نوشته شده توسط N_D در بخش برنامه نویسی در Delphi
    پاسخ: 12
    آخرین پست: شنبه 30 اردیبهشت 1391, 12:13 عصر
  2. frame component
    نوشته شده توسط mohsen2004_pm در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: شنبه 07 شهریور 1383, 13:29 عصر
  3. راست چین کردن Scrollافقی در یک Frame
    نوشته شده توسط jannati در بخش طراحی وب (Web Design)
    پاسخ: 10
    آخرین پست: شنبه 05 اردیبهشت 1383, 14:59 عصر
  4. قرار دادن frame در یک برنامه
    نوشته شده توسط tazekar در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: دوشنبه 14 مهر 1382, 01:25 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •