1. 程式人生 > >matlab實現 基於若干個高階位元平面的影象重構 程式碼

matlab實現 基於若干個高階位元平面的影象重構 程式碼

題目:基於上一篇位元平面分層的結果,利用前3個或4個高階位元平面重構影象image_construct (EXP3C.tif),並對比重構影象與相應原影象的差異性。

提示:可採用影象相減獲取原影象與重構影象的差值影象,以對比和分析原影象及重構影象的差異性,如重構影象缺失的主要資訊是什麼。

步驟:

1. 使用上一篇位元平面分層實現的函式獲得影象的8位元平面圖像

2. 重構前4位元平面,即使用第n個位元平面的畫素乘以常數2的n-1次方相加,得到前n位元平面重構後的影象

3. 使用原影象減去重構前4位元平面,得到差值影象

實現效果演示:

為了演示重構前後的對比效果,重構了前6位元平面和前4位元平面,輸出並作對比。

實現原始碼:

clc;clear;close all;

img1 = imread('EXP3B.tif');
img2 = myImageBitPlaneSlicing(img1);%獲取影象的8位元平面
img3 =  img2(:,:,1)*1 + img2(:,:,2)*2 + img2(:,:,3)*4 + img2(:,:,4)*8;%重構前4位元影象
img3 = uint8(img3);%將影象轉換為和原圖相同的型別
img4 = img1 - img3;%獲取差值影象

%顯示影象
figure('NumberTitle', 'off', 'Name', '實驗一第三題'); 
subplot(2,3,1);imshow(img1);title('EXP3B.tif原始影象');
subplot(2,3,2);imshow(img3);title('4位元平面重構');
subplot(2,3,3);imshow(img4);title('差值影象');

img1 = imread('EXP3C.tif');
img2 = myImageBitPlaneSlicing(img1);%獲取影象的8位元平面
img3 =  img2(:,:,1)*1 + img2(:,:,2)*2 + img2(:,:,3)*4 + img2(:,:,4)*8;%重構前4位元影象
img3 = uint8(img3);%將影象轉換為和原圖相同的型別
img4 = img1 - img3;%獲取差值影象

%顯示影象
subplot(2,3,4);imshow(img1);title('EXP3C.tif原始影象');
subplot(2,3,5);imshow(img3);title('4位元平面重構');
subplot(2,3,6);imshow(img4);title('差值影象');