encrypting a dicom image?
조회 수: 15 (최근 30일)
이전 댓글 표시
i have the following code for encryption and decryption of .tif image. please help me to modify the samee for dicom images. when running with dicom following error is displayed as Error using ==> bitxor Inputs must be unsigned integers of the same class or scalar doubles.
Error in ==> processing at 16
proImage(ind1,ind2) = bitxor(Img(ind1,ind2),Fkey(ind1,ind2));
code
main function
clc;
close all;
clear all;
Img=imread('cameraman.tif');
%figure,imshow(Img);
%Img = dicomread('188.dcm');
figure,imshow(Img,[])
%figure,imshow(Img)
title('input image');
[n m k] = size(Img);
key = keyge(n*m);
EncImg = processing(Img,key);
figure,imshow(EncImg)
title('ecrypted');
imwrite(EncImg,'Encoded.jpg','jpg');
dec= processing(EncImg,key);
figure,imshow(dec)
title('decoded');
processing function
function [proImageOut] = processing(ImgInp,key)
[n m k] = size(ImgInp);
% key =cell2mat(struct2cell( load('key5.mat')));
% key = keyGen(n*m);
for ind = 1 : m
Fkey(:,ind) = key((1+(ind-1)*n) : (((ind-1)*n)+n));
end
len = n;
bre = m;
for ind = 1 : k
Img = ImgInp(:,:,ind);
for ind1 = 1 : len
for ind2 = 1 : bre
proImage(ind1,ind2) = bitxor(Img(ind1,ind2),Fkey(ind1,ind2));
end
end
proImageOut(:,:,ind) = proImage(:,:,1);
end
% figure,imshow(proImageOut);
return
key
function [key] = key(n)
n = n*8;
% n = 2048*2048*16;
% n = 24 * 24 * 8;
bin_x = zeros(n,1,'uint8');
r = 3.9999998;
bin_x_N_Minus_1 = 0.300001;
x_N = 0;
tic
for ind = 2 : n
x_N = 1 - 2* bin_x_N_Minus_1 * bin_x_N_Minus_1;
if (x_N > 0.0)
bin_x(ind-1) = 1;
end
bin_x_N_Minus_1 = x_N;
end
toc
% save bin_sec bin_x;
t = uint8(0);
key = zeros(n/8,1,'uint8');
for ind1 = 1 : n/8
for ind2 = 1 : 8
key(ind1) = key(ind1) + bin_x(ind2*ind1)* 2 ^ (ind2-1);
end
end
댓글 수: 0
답변 (1개)
Walter Roberson
2015년 12월 13일
What does
dicominfo('188.dcm')
show for BitDepth ? I suspect you will find that it returns 16 for your file -- that is, that your DICOM image is uint16() where your code is expecting it will be uint8(). You will need to decide how you want to handle the situation.
댓글 수: 2
Walter Roberson
2015년 12월 13일
Replace
for ind = 1 : m
Fkey(:,ind) = key((1+(ind-1)*n) : (((ind-1)*n)+n));
end
with
for ind = 1 : m
Fkey(:,ind) = cast( key((1+(ind-1)*n) : (((ind-1)*n)+n)), class(ImgInp) );
end
참고 항목
카테고리
Help Center 및 File Exchange에서 DICOM Format에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!