can anyone please convert this codef or 512*512*3 lena image, it is working well with * lena image

3 次查看(过去 30 天)
close all;
clear all;
clc;
*[A,map]=imread('lena_2.bmp');
RGB = ind2rgb(A,map);
figure(1);
imshow(RGB);
title('original image');
pause(2);*
[Height,Width,Depth] = size(RGB);
if Depth > 1
A1 = double(RGB(:,:,1));
else
A1 = double(RGB);
end
Qtype = 'uniform';
B = 5;
y=DPCM_2D(A1,Qtype,B);
%-------------function DPCM_2D-----------
function y=DPCM_2D(f,Qtype,B,map)
L = 2^B; % # levels in the quantizer%2^5=32
[Height,Width,Depth] = size(f);% get the image 'lena256.bmp'%512*512*1
%
% compute optimal predictor coefficients
[alfa,E] = LinearPredict_2D(f,map);%LinearPredict_2D('lena256.bmp');
%
% Design the uniform quantizer using 5*std dev as the limits
switch Qtype
case 'uniform'
dMin = mean2(E) - 5*std2(E);
dMax = mean2(E) + 5*std2(E);
q = 2*dMax/L; % step size
q2 = q/2;
dR = linspace(dMin,dMax,L+1); % decision intervals
rL = zeros(L,1); % reconstruction levels
for k = 1:L
rL(k) = dR(k)+q2;
end
case 'nonuniform'
[DR,C] = dpcmQuantizer(E,B);% design a B-bit
end
Mu = mean2(f);% mean value of the image
f = f - Mu;% remove mean value
% Implement the 2D DPCM
y = zeros(Height,Width);% array to store reconstructed image
pe = zeros(Height,Width);% array to store differential image
peq = zeros(Height,Width);% array to store quantizeddifferential image
x1 = zeros(Height+1,Width+2); % array to store reconstructed image
y(1,:) = f(1,:) + Mu;
y(:,1) = f(:,1) + Mu;
%
f = padarray(f,[1 2 ],'symmetric','pre');
% First row, first column no prediction
x1(1,:) = f(1,:);% store previously reconstructed pixels
x1(:,1) = f(:,1);
for r = 2:Height
for c = 2:Width
xhat = alfa(1)*x1(r,c-1) + alfa(2)*x1(r-1,c) + ...
alfa(3)*x1(r-1,c-1)+ alfa(4)*x1(r-1,c+1);
pe(r,c) = f(r,c) - xhat;
switch Qtype
case 'uniform'
for k = 1:L
if pe(r,c)>dR(k) && pe(r,c)<=dR(k+1)
peq(r,c) = rL(k);
elseif pe(r,c)<= dR(1)
peq(r,c) = rL(1);
elseif pe(r,c) > dR(L+1)
peq(r,c) = rL(L);
end
end
case 'nonuniform'
%{
for k = 1:L
if (pe(r,c)>DR(k) && pe(r,c)<=DR(k+1))
peq(r,c) = C(k);
end
end
%}
d1 = abs(pe(r,c)-C(1));
for k = 2:L
d2 = abs(pe(r,c)-C(k));
if d2<d1
d1 = d2;
J = k;
end
end
peq(r,c) = C(J);
end
x1(r,c) = peq(r,c) + xhat;% previously
y(r,c) = x1(r,c) + Mu;% mean added reconstructed pixel
%y.Height;
end
end
% Display differential and reconstructed images
figure(4),imshow(pe,[]), title('Differential image');
pause(2);
figure(5);
imshow(y,[]);
title('Compressed using DPCM');
end
%%%%function LinearPredict
function [alfa,pe] = LinearPredict_2D(I,map)%I='lena256.bmp'%512*512 double
% [alfa,pe] = LinearPredict 2D(I)
% I = input intensity image
% alfa = predictor coefficient vector
% pe = prediction error image of the same size as I
% Uses 2D linear prediction to
% create the differential image
% xhat(m,n) = alfa1(1)*x(m,n-1)+alfa(2)*x(m-1,n)+...
% alfa(3)*x(m-1,n-1)+alfa(4)*x(m-1,n+1)
[Height,Width,Depth] = size(I);
if Depth > 1
I1 = double(I(:,:,1));
else
I1 = double(I);%512*512 double
end
AAA=ind2rgb(I1,map);
Mu = mean2(I);% mean value of the image%0.4866
I = I - Mu;% mean removed input image
r00 = mean2(I .* I);
r01 = sum(sum(I(:,2:Width).* I(:,1:Width-1)))/(Height*(Width-1));
r10 = sum(sum(I(2:Height,:).* I(1:Height-1,:)))/((Height-1)*Width);
r11 = sum(sum(I(2:Height,2:Width).* I(1:Height-1,1:Width-1)))/((Height-1)*(Width-1));
r12 = sum(sum(I(2:Height,3:Width).* I(1:Height-1,1:Width-2)))/((Height-1)*(Width-2));
r02 = sum(sum(I(1:Height,3:Width).* I(1:Height,1:Width-2)))/(Height*(Width-2));
alfa = inv([r00 r11 r10 r12; r11 r00 r01 r01;r10 r01 r00 r02; r12 r01 r02 r00])/[r01 r10 r11 r11];
% Implement the Linear Predictor
pe = zeros(Height,Width,Depth);% array to store prediction errors
%I1 = padarray(I1,[1 1],’symmetric’,’pre’);
I = padarray(I,[1 2],'symmetric','pre');
for r = 2:Height+1
for c = 2:Width+1
xhat = alfa(1)*I(r,c-1)+alfa(2)*I(r-1,c)+ ...
alfa(3)*I(r-1,c-1) + alfa(4)*I(r-1,c+1);
pe(r-1,c-1) = I(r,c) - xhat;% differential pixel
end
end
code in bold is changes that I made to convert indexed image to rgb but than also getting the image I attached
  2 个评论
Image Analyst
Image Analyst 2015-4-26
I have no idea what you're doing, or what you want to do, what a "codef" is, and what you want to convert the codef into. Try http://www.mathworks.com/matlabcentral/answers/6200-tutorial-how-to-ask-a-question-on-answers-and-get-a-fast-answer this.
And I'm not sure what the point of this code is:
[A,map]=imread('lena_2.bmp');
RGB = ind2rgb(A,map);
What is the class of A? Is it a 2D indexed image to start with?

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by