我有一个大小为[200x200x200]的医学成像矩阵。
为了显示它,我目前正在使用imshow3D功能,这是一个很好的工具,由Maysam Shahedi建造。 此工具逐片显示3D图像,基于鼠标的切片浏览
在我当前的项目中,我从原始输入图像为每个z层生成RGB图像。输出是尺寸为[200x200x200x3]的3D彩色图像(每层现在由3个通道表示)。
imshow3D功能在灰度图像上运行良好。是否可以用它来显示RGB图像?
答案 0 :(得分:4)
我从Matlab FileExchange看了一下这个漂亮的imshow3D function,并且很容易改变它以允许使用一堆RGB图像。
该功能的神奇部分是
imshow(Img(:,:,S))
显示图片S
的切片Img
。我们只需将其更改为显示图片S
的所有3个频道,方法是将其更改为Img(:,:,S,:)
。结果将是 200×200×1×3 ,而MATLAB期望RGB图像的尺寸 200×200×3 。只需squeeze
此图片即可获得正确的尺寸。这导致:
imshow(squeeze(Img(:,:,S,:))
为了显示RGB图像,请在函数imshow3D
中执行搜索和替换,将所有Img(:,:,S)
替换为squeeze(Img(:,:,S,:))
并将其替换为std::string plain, getText, cipher, decrypted_data;
cout << "Enter the plain text :\n";//getting the string from the user;
getline(std::cin, plain);
std::cout << "Plain Text: " << plain << std::endl;//printing the plain text
std::cout << std::endl;
CryptoPP::AutoSeededRandomPool rng;
// Encryption & Decryption
CryptoPP::InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 1536);
CryptoPP::RSA::PrivateKey privateKey(params);
CryptoPP::RSA::PublicKey publicKey(params);
CryptoPP::RSAES_OAEP_SHA_Encryptor e(publicKey);
CryptoPP::StringSource(plain, true, new CryptoPP::PK_EncryptorFilter(rng, e, new CryptoPP::StringSink(cipher)));
cout << "Ciphertext: " << cipher << endl;
std::ofstream out("output.text");//writing to a file
out << cipher;
out.close();
cout << endl;
std::ifstream readfile("output.text");//reading from the file
if (readfile.is_open())
{
while (getline(readfile, getText))
{
std::cout << getText << '\n';
}
}
readfile.close();
CryptoPP::RSAES_OAEP_SHA_Decryptor d(privateKey);
CryptoPP::StringSource(getText, true, new CryptoPP::PK_DecryptorFilter(rng, d, new CryptoPP::StringSink(decrypted_data)));
std::cout << "Decrypted Text: " << decrypted_data << std::endl;//printing the decrypted file
作品!