Когато пиша изображението, то изглежда черно

Имам програма, която връща grayscale изображение. Но когато се опитам да напиша изображението, то изглежда напълно black. Защо така? Как мога да напиша изображението и да получа очаквания резултат?

Благодаря.


person Simplicity    schedule 13.11.2013    source източник
comment
опитайте едно от тези: imshow(img,[]) или imshow(uint8(img)). Ако това работи, причината е както е посочено в отговора по-долу. Вашите стойности бяха твърде ниски за показване или не беше от правилния клас.   -  person Autonomous    schedule 13.11.2013


Отговори (3)


Първо проверете типа на вашите данни. Можете да преобразувате типа на данните чрез например double() или uint16() и т.н. (Проверете помощта за преобразуване на типове). Ето пример как премащабирате вашите стойности до диапазона на интензитета на uint16, цели числа без знак с ~65k възможни различни стойности. Кастингът разбира се води до по-малка точност на стойностите на интензитета.

new_img(:,:) = uint16((new_img(:,:)./max(max(new_img(:,:),[],1)))*65536);

След това трябва да можете да запишете данните във вашия файл.

person Barkel    schedule 13.11.2013
comment
Тук изглежда, че запазеното изображение ще бъде двоично? - person Simplicity; 13.11.2013
comment
За да добавите коментара си към Barkel: Типът файл (разширение: напр. *.jpeg), в който искате да запишете, има значение. Да кажем, че използвате функцията imwrite, тогава искате да помислите и за файловия тип, в който искате да запишете. Не всички файлови типове приемат всички типове данни. За мен прост трик, който най-често работи, е използването на функцията mat2gray върху вашето изображение, преди да искате да запазите. Но не забравяйте, че това може да мащабира данните по начин, който намирате за нежелан. - person Martin; 14.08.2019

Уверете се, че вашето изображение в сиви нюанси е от правилния клас. Освен това проверете стойностите в генерираното изображение. Ако просто са твърде ниски, всички ще изглеждат черни. Ако можете да предоставите по-конкретна информация, може да е възможно да дадете по-подробен отговор.

person Martin    schedule 13.11.2013

ако работите върху двоично изображение (преди да бъде преобразувано в сиво) и се каните да го конвертирате в сива скала, тогава внезапно променяте обхвата на пикселите от [0, 1] на [0, 255]. така че стойността '1' в двоичното изображение е напълно бяло, но в сивото изображение е почти черно.

Опитайте тази:

img = imread('image_name.jpg');
imshow(img*50)

това ви прави сигурни, че вашето изображение е черно или просто неговите пикселни стойности не са подходящи.

person Jalal Aghazadeh    schedule 13.11.2013